decodage de donnees et rafraichissement d'ecran - C - Programmation
Marsh Posté le 15-12-2005 à 13:01:36
Je ne suis pas sûr de comprendre ce que tu cherches à faire.
Mais je pense que ce genre de tâche peut se centraliser en une seule boucle.
Du genre :
TANT QUE (réception non terminée)
Récupérer un caractère
Stocker le caractère en mémoire
Rafraîchir l'affichage
FIN TANT QUE
Evidemment, si ton but est d'utiliser plusieurs processus parallèles, soit tu es sous Unix et tu utilises un bon vieux fork() des familles, soit tu étudies les threads.
Mais comme tu es débutant, je te conseille plutôt de t'atteler à la première solution, celle de la boucle. Je pense que ce sera bien suffisant pour la tâche que tu as à mener.
Marsh Posté le 16-12-2005 à 10:05:45
Merci pour ta reponse
En fait, je vais utiliser lenvironnement de programmation metrowerks et une fois le code acheve, limplementerai sur lhardware developpe.
Jutiliserai egalement un afficheur LCD connecte au nicrocontroleur que je vais utliser (star12) via une interface parallele.
En fait, jai cree un pcb constitue dun microcontroleur, un afficheur LCD, une alimentation (et bien sur dautres composants : capas, diodes, resistances de protection, quartz
). Ceci sera un testeur pour etablir une classification doccupant.
La vitesse du processeur est environ egale a 8MHz.
Le testeur est connecte a un multi gateway (MGW) par lintermediaire dune interface serie (cable RS232) et le MGW est connecte au capteur sensoriel de classification (sur le siege de la voiture) via la communication standard GMLAN qui transmet les messages a une vitesse de 38400 bauds. Je dois envoyer une requete en premier lieu, ensuite je reçois un telegramme de reponse indiquant que la communication est autorisee (desole pour la traduction de « enabled ») et par la suite le testeur reçoit periodiquement des messages (sans autre requete prealable) a une vitesse donc de 38400 Bauds. Chaque caractere du telegramme arrive sequentiellement, je dois donc le stocker dans un buffer et une fois que tout le telegramme a ete reçu, je peux le decoder et trouver la classe.
Tout dabord, jinitialiserai les ports (du microcontroleur, de lafficheur LCD, du MAX232), comme entree, sortie ou entree/sortie selon les data sheets que jai (pour linterface parallele, linitialization des ports (cote LCD et cote micro) recevant les signaux de donnees transmis entre le micro et le LCD dependent de la valeur des signaux R/W et enable).
Ensuite jenvoie donc la cle dactivation puis une fois activee je dois en meme temps, stocker les donnees arrivant et attendre les caracteres suivants. Je peux utiliser une interruption du main pour stocker ces donnees puisque la vitesse darrivee des donnees ets tres faible devant celle du processeur. Quand le telegramme a ete reçu je prends les donnees stockees sequentiellement, les decode, rafraichs lecran et affiche la classe trouvee ou un signal derreur.
Jespere que jai pensé a decrire le maximum de choses.
Je pense aussi quune boucle while suffit mais le codage avec pointeur prenant les donnees et pointeur plaçant les donnees dans le buffer, ma ralentit bien vu que je sais pas trop comment my prendre.
merci encore davance
a+
Marsh Posté le 16-12-2005 à 10:19:57
avmtptortri a écrit : une fois le code acheve, limplementerai sur lhardware developpe. |
Ahhh... tu es sur de l'embarqué. La problématique est très différente.
avmtptortri a écrit : Je pense aussi quune boucle while suffit mais le codage avec pointeur prenant les donnees et pointeur plaçant les donnees dans le buffer, ma ralentit bien vu que je sais pas trop comment my prendre. |
Ca ne devrait pas te ralentir, si tu gères bien la chose.
Maintenant, je suis très loin des réalités des systèmes embarqués, si Emmanuel passe par là il sera de bien meilleur conseil.
Marsh Posté le 19-12-2005 à 18:52:29
ton microcontroleurà 8 Mhz, ça serait pas un 8151 par hasard? A l'iut, j'avais une communication entre 2 pc via un modem. On avait utilisé les interruptions.
Marsh Posté le 20-12-2005 à 11:15:27
c le MC9S12DG256 de chez motorola que j'utilise. Etant donne que la vitesse du processeur (MHz) est nettement superieure a celle d'arrivee des messages (38400 bits/sec) je peux travailler avec des interruptions sans probleme.
Marsh Posté le 15-12-2005 à 12:54:17
Bonjour,
je suis en phase d'apprentissage de programmation en c, ce qui explique certainement le niveau de mes questions.
Un telegramme (constitue d'une sequence de lettres et chiffres et symboles) arrive de maniere periodique (frequence d'arrivee des donnees superieure ou non a celle du processeur). Le but est de le decoder et d'afficher une classification.
Pour cela, je pense prendre chaque caractere arrivant sequentiellement, le stocker dans un buffer a l'aide d'un pointeur et, lorsque tout le telegramme a ete reçu, le decoder. Pendant ce temps, je dois continuer a attendre les caracteres suivants. Je ne veux donc pas interrompre la boucle principale d'arrivee des messages.
De plus, d'une classification à l'autre, j'aimerais rafraichir l'ecran sur lequel je compte afficher cette classification.
Quelqu'un aurait il une idee qui pourrait m'aiguiller (aussi bien pour l'algorithme que pour le code)?
Desole pour le niveau des questions, et merci d'avance pour votre aide
Jé