Solution du buffer à double index très utilisé en communication série. (le lien donné au post précédent en est une implémentation plus générale)
Le principe :
- un tableau de caractère suffisament grand
- un index de lecture servant de pointeur sur le tableau
- un index d'écriture servant de pointeur sur le tableau
Le fonctionnement :
- sur l'évènement reception du port série et à l'aide du pointeur écriture, tu remplie le tableau caractère par caractère. Si l'index arrive à la fin du tableau, il continue au début du tableau, et ainsi en boucle.
Indépendemment, et avec l'index de lecture, tu lis les caractères qui restent à lire dans le tableau, un à un et éventuellement tu reconstruit une chaine si tu as besoin. Si l'index arrive à la fin du tableau, il continue au début
Si les 2 index sont différents, c'est que des caractères sont à lire. Eventuellement tu peux faire une fonction pour cela. Pense au fait que un des 2 index a pu repartir au début du tableau.
Cela fonctionne très bien, est relativement, et travaille surtout de mainière asynchrone comme le port. Les fonctions de lecture et d'écriture sont totalement indépendante l'une de l'autre.
Pour ce qui est de la taille du tableau, trop n'est pas necessaire, trop peu est risqué. Si tu reçois tes données de façon régulière sous forme de trame, la taille du tableau ne devrait pas etre inférieure à 10 trames complètes.
Perso je ne descends jamais en dessous de 8192 caractères. La pluspart du temps ça me laisse bien plus de marge que necessaire.
---- Sevyc64 (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #
[ Lien ]