Bonjour a tous/tes
Je suis en train d'écrire une application C/C++ qui dialogue avec une interface électronique par le biais d'un port série /dev/ttyS0. Il s'agit d'une communication asynchrone, même si dans 90% des cas, c'est mon application qui émet une trame puis l'interface qui répond.
J'ai pour le moment trouvé que deux solutions, mais aucunes des deux me semble correcte. Cependant, je vous les expose.
Première)
1 Je lis de manière bloquante le fichier /dev/ttS0 pendant 1 seconde.
2 Si j'ai un réponse, je traite puis je continu, sinon je continu
3 Si j'ai une trame à émettre, je l'émet
4 Je reviens à l'étape 1
Ce n'est pas très élégant, on boucle en permanence.
Deuxième)
1 Je crée un premier thread de lecture bloquante T1
1 Je lis de manière bloquante et définitve cette fois-ci.
2 Je viens de recevoir une réponse, je la traite
3 Je reviens à l'etape 1
2 Je créé un deuxième thread T2
1 J'attend un quelquonque évenement (touche clavier par exemple)
2 J'emet une trame
3 Je reviens à l'étape 1
Cette façon n'est pas meilleur, car elle est trés lourde. Il faut à la fois mettre en place un mécanisme de protection du descripteur de fichier. Mais aussi, un mécanisme de synchronisation entre ces 2 threads, car chque fois que j'emet une trame je dois attendre un accuse de l'interface et inversement, si l'interface m'envoit une trame, je dois emettre un accusé + quelques cas particulier.
Vous en pensez quoi? J'attends vos avis avec impatience.
Partager