Utilisation d'une FIFO pour stocker des données recu sur un port série et les tr [Résolu]

cs_norber59480 37 Messages postés mercredi 11 janvier 2006Date d'inscription 19 juin 2008 Dernière intervention - 28 avril 2008 à 17:17 - Dernière réponse : cs_norber59480 37 Messages postés mercredi 11 janvier 2006Date d'inscription 19 juin 2008 Dernière intervention
- 2 mai 2008 à 16:21
Bonjour à tous.

   Je vous expose mon probléme : 
Je dois récupérer des trames sur le port série et effectuer differentes actions en fonction de la données récuperer.
Les données arrive sur le port série par paquets de trames. Il sera donc impossible de traiter les données en direct.
On m'a suggerer d'utiliser une FIFO.
Je connais bien le principe mais le probleme, c'est que je ne sait pas du tout comment réaliser cette FIFO. Les infos trouvées sur ce site ne m'ont pas aidé. Je ne comprend pas bien la structure des programmes qui sont réalisés.
Si quelqu'un pouvait venir a mon secour ca serait sympa...
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 29 avril 2008 à 20:39
3
Merci
Ben c'est justement le principe des piles, listes, et autres buffers dans les solutoins que l'on t'a donné.

Tu as du coté une tache qui remplie le buffer, déclenchée par l'évènement de reception sur le port.

Tu as de l'autre coté, le reste de ton programme qui vient de temps en temps voir si des données sont arrvées, les lit et les traites.

C'est du traitement parallèle si on regarde de loin, car dans la réalité, l'évènement reception va interrompre ce que tu es en train de faire pour venir remplir le buffer, puis te rendre la main pour que tu continue ton boulot.

Macroscopiquement, c'est du traitement parallèle car les 2 taches sont totalement indépendantes

L'idéal serait évidemment de faire du multithreading en mettant la reception dans un thread à part, mais c'est tout simplement impossible en VB6.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_casy
Meilleure réponse
cs_norber59480 37 Messages postés mercredi 11 janvier 2006Date d'inscription 19 juin 2008 Dernière intervention - 2 mai 2008 à 16:21
3
Merci
MErci beaucoup pour votre aide!!!!
J'ai résolu mon probleme meme si je pense qu'au final c'était pas utile d'utilisé une FIFO car, l'analyse est assez rapide pour traiter les donner directement (le débit est seulement de 9600Kbit/s). Cependant cela me permet d'avoir une sécurité quand à la reception des donner et donc dans l'analyse ce qui doit me permettre de rater aucune trame.

Merci cs_norber59480 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_norber59480
Kristof_Koder 920 Messages postés vendredi 3 août 2007Date d'inscription 27 octobre 2008 Dernière intervention - 28 avril 2008 à 18:43
0
Merci
Google est ton ami !!
ici par ecxemple : http://faq.vb.free.fr/index.php?question=159
Commenter la réponse de Kristof_Koder
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 28 avril 2008 à 19:45
0
Merci
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 #   
Commenter la réponse de cs_casy
cs_norber59480 37 Messages postés mercredi 11 janvier 2006Date d'inscription 19 juin 2008 Dernière intervention - 29 avril 2008 à 09:30
0
Merci
Merci pour vos réponses....
Cependant google doit pas ete mon amis parce que les site que j'ai trouver à ce sujet et particulierement le tien, ne repondait pas a mes questions....
J'ai une autre questions qui est lié. Est ce que je peux lire le port serie en continue, et traiter les trames en parralléle? Ou bien je doit créer une interruption de la lecture pour traiter les trames?!
Commenter la réponse de cs_norber59480

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.