OVH Cloud OVH Cloud

Sérialisation et désérialisation en C

4 réponses
Avatar
noone
Bonjour,

je souhaite envoyer des donn=E9es plus ou moins complexes par une
liaison s=E9rie
(via un microcontr=F4leur (=E9metteur) et un PC (r=E9cepteur))

ces donn=E9es pourraient =EAtre dans un tableau (=E0 deux dimensions) ou
dans une structure
contenant des listes (tableau =E0 1 dimension)

je ne sais pas trop comment proc=E9der.

En C++ j'aurais tendance =E0 utiliser la biblioth=E8que Boost
http://www.boost.org/libs/serialization/doc/index.html

En Java ou C# la s=E9rialisation XML.


Comment fairiez-vous ?

Merci d'avance

4 réponses

Avatar
Harpo
On Tue, 28 Nov 2006 13:05:53 -0800, wrote:

Bonjour,

je souhaite envoyer des données plus ou moins complexes par une
liaison série
(via un microcontrôleur (émetteur) et un PC (récepteur))

ces données pourraient être dans un tableau (à deux dimensions) ou
dans une structure
contenant des listes (tableau à 1 dimension)

je ne sais pas trop comment procéder.

En C++ j'aurais tendance à utiliser la bibliothèque Boost
http://www.boost.org/libs/serialization/doc/index.html

En Java ou C# la sérialisation XML.


Il y a au moins 2 problèmes, 1- la gestions de ports série 2- les
données que tu veux échanger par ce port.

1- dépends de l'OS, ça se fait généralement sur des machines où il y a
des ports série.

2- Je ne connais pas Boost et je ne peux donc pas juger.
Je ne suis pas un fan de XML, mais ça à l'avantage d'être une espèce
de standard, on peut facilement représenter des tableaux à n dimensions
en XML. Tu traduis tes tableaux en XML, tu les balances sur le port et tu
les récupères de l'autre coté.

C'est surtout un problème de représentation des données que tu balances
et reçois, c'est un protocole de présentation, il faut définir de
manière formelle de cette représentation.

C'est bien la première fois que je vante XML, mais tu trouveras dans la
plupart des langages des librairies pour le parser. Il y a surement mieux
mais c'est un choix qu'on ne pourra guère te reprocher.

Bref, pour le moment ce n'est pas une question sur le langage C...

--
stats usenet : http://patrick.davalan.free.fr/ustat/
home page : http://patrick.davalan.free.fr/

Avatar
Laurent Pointal
On Tue, 28 Nov 2006 13:05:53 -0800, wrote:
C'est bien la première fois que je vante XML, mais tu trouveras dans la
plupart des langages des librairies pour le parser. Il y a surement mieux
mais c'est un choix qu'on ne pourra guère te reprocher.


JSON ?

http://www.json.org/

Il y a une librairie pour le C (je l'utilise), ainsi que pour d'autres
langages.

Avatar
Pierre Maurette
Bonjour,

je souhaite envoyer des données plus ou moins complexes par une
liaison série
(via un microcontrôleur (émetteur) et un PC (récepteur))

ces données pourraient être dans un tableau (à deux dimensions) ou
dans une structure
contenant des listes (tableau à 1 dimension)

je ne sais pas trop comment procéder.

En C++ j'aurais tendance à utiliser la bibliothèque Boost
http://www.boost.org/libs/serialization/doc/index.html

En Java ou C# la sérialisation XML.


Comment fairiez-vous ?


Je n'ai que peu de renseignements, mais je vois deux types d'approche:

1 - On admet que l'émetteur est pauvre en ressources et que son
implémentation (format des données en particulier) est déterminée, et
que le récepteur peut être n'importe quelle machine. A ce moment-là,
vous documentez un embryon de protocole sur base "octet", soit à partir
d'un ensemble de données connu d'avance, soit sur une base simplifiée
<header><data><header><data><header><data>... Vous pouvez utiliser une
méthode HiByte LowByte pour les entiers, ASCII pour les flottants par
exemple.
A l'arrivée, vous écrivez portable pour récupérer les données. Il
faudrait peut-être un minimum de handshake, au moins une demande de
réémission.

2 - On constate qu'on à plus ou moins un ou des PC en supervision sur
un automate ou un capteur/actionneur. A ce moment-là, je regarderais
l'utilisation d'un protocole de terrain, type ModBus (Over Serial Line)
ou Profibus.

<URL:http://www.google.fr/search?hl=fr&client=firefox-a&rls=org.mozilla_s&q=free+modbus+library+OR+biblioth%C3%A8que&btnG=Rechercher&meta=>

<URL:http://www.google.fr/search?hs=WRN&hl=fr&client=firefox-a&rls=org.mozilla_s&q=free+profibus+library+OR+biblioth%C3%A8que&btnG=Rechercher&meta=>


Mais je suis peut-être complètement à coté de votre problème.

--
Pierre Maurette

Avatar
noone
A ce moment-là, je regarderais
l'utilisation d'un protocole de terrain, type ModBus (Over Serial Line)
ou Profibus.


je pense que le problème c'est que je n'ai pas d'OS temps réel qui
tourne sur le microcontrôleur
or pour utiliser un protocole de terrain c'est probablement nécessaire
(je dis probablement car je n'ai jamais mis en oeuvre ce genre de
"bidule")