Port série, Linux & Utilisation non-standard

Port série, Linux & Utilisation non-standard - C - Programmation

Marsh Posté le 22-02-2005 à 10:21:52    

Bonjour!
 
J'essaye de coder un programme avec pour objectif de traiter des données très normalisées provenant du port série. La plateforme de reception est sous linux.
 
Pour expliquer simplement ce qui arrive par le port série, chaque information est constitué de 2 packets. Dans chaque packet, les 3 premiers bits servent à l'identification de l'information ( 2 premiers bits pour le type d'info. et le dernier pour le numéro du packet ). Les informations ne sont pas envoyées à interval regulier, cependant on peut estimer environ 10 informations par secondes, pas vraiment besoin de grande vitesse donc. Il y a pas de système de correction d'erreur ou même de détection.
 
Je me suis pas mal renseigné la dessus et visiblement, c'est termios.h qui est désigné pour tout ce qui est E/S sur port série sous linux. Mais il me reste plusieurs questions là dessus, par exemple, est-ce que termios.h me permettra de faire ce que je veux ( à savoir recuperer les infos pour pouvoir les traiter suivant leurs types ) ? Et comment faire pour traiter les infos bit par bit ( apparement termios.h traite ce qui provient du port série comme s'il s'agissait de caractères, hors dans mon cas pas vraiment, si je pouvais diviser chaque packet dans un tableau, où chaques cases correspondrait à un bit, je suis sur que ca serait pas mal ;) exemple: packet[1][1] pour le premier bit du premier packet et packet[2][6] pour le 6eme bit du second packet ).
 
Merci d'avance, j'attend vos réponses avec impatience :)

Reply

Marsh Posté le 22-02-2005 à 10:21:52   

Reply

Marsh Posté le 22-02-2005 à 13:44:01    

:'( personne ne saurait m'aider ?

Reply

Marsh Posté le 22-02-2005 à 14:01:28    

tu vas devoir utiliser les operateurs de décalage de bits << et >>
termios.h doit être suffisant...

Reply

Marsh Posté le 23-02-2005 à 11:36:24    

Je pensse que c'est ok pour termios, mais maintenant je dois traiter les données, donc à la base j'ai 2 caractères contenu dans "buf", et c'est là que je vois pas vraiment comment faire :/
 
Je dois séparer les 3 premiers bits, ainsi que les 13 autres, dans 2 entiers différents.
 
J'ai éventuellement une petite idée mais je ne sais pas si ca va marcher ( en utilisant justement les opérateurs binaires que tu m'as conseillé western ;) ).
 
Soit les entiers int1 et int2 et la chaine de caractère char
 
int1 = char[1]
int2 = char[2]
 
Possible?


Message édité par quickman le 23-02-2005 à 11:47:29
Reply

Marsh Posté le 23-02-2005 à 11:53:55    

désolé, je n'ai pas le courage pour expliquer les trucs sur les pointeurs en C...
Si tu te connais un minimum, fais des essais de programmations, puis utilise un debugger (gdb) et détecteur de fuite de mémoire (valgrind)... Le dernier logiciel à utiliser est le testeur de performances (gprof)

Reply

Marsh Posté le 23-02-2005 à 11:54:00    

quickman a écrit :

Je dois séparer les 3 premiers bits, ainsi que les 13 autres, dans 2 entiers différents.
 
J'ai éventuellement une petite idée mais je ne sais pas si ca va marcher ( en utilisant justement les opérateurs binaires que tu m'as conseillé western ;) ).
 
Soit les entiers int1 et int2 et la chaine de caractère char
 
int1 = char[1]
int2 = char[2]
 
Possible?


Oui, avec des 'unsigned'.
 
Ceci peut aider...
http://mapage.noos.fr/emdel/clib/ed/inc/bits.h


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-02-2005 à 12:02:48    

Pourquoi seulement des unsigned ?

Reply

Marsh Posté le 23-02-2005 à 12:49:14    

cricri_ a écrit :

Pourquoi seulement des unsigned ?


Parce que le comportement des opérateur bits sur des signed dépend de l'implémentation. Pour être portable, mieux vaut éviter les signed...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-02-2005 à 13:09:46    

Merci ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed