decodage de donnees et rafraichissement d'ecran

decodage de donnees et rafraichissement d'ecran - C - Programmation

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

Reply

Marsh Posté le 15-12-2005 à 12:54:17   

Reply

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.

Reply

Marsh Posté le 16-12-2005 à 10:05:45    

Merci pour ta reponse
En fait, je vais utiliser l’environnement de programmation metrowerks et une fois le code acheve, l’implementerai sur l’hardware developpe.  
J’utiliserai egalement un afficheur LCD connecte au nicrocontroleur que je vais utliser (star12) via une interface parallele.
En fait, j’ai cree un pcb constitue d’un microcontroleur, un afficheur LCD, une alimentation (et bien sur d’autres composants : capas, diodes, resistances de protection, quartz…). Ceci sera un testeur pour etablir une classification d’occupant.  
La vitesse du processeur est environ egale a 8MHz.
Le testeur est connecte a un multi gateway (MGW) par l’intermediaire d’une 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 d’abord, j’initialiserai les ports (du microcontroleur, de l’afficheur LCD, du MAX232), comme entree, sortie ou entree/sortie selon les data sheets que j’ai (pour l’interface parallele, l’initialization 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  j’envoie donc la cle d’activation 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 d’arrivee 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 l’ecran et affiche la classe trouvee ou un signal d’erreur.
J’espere que j’ai pensé a decrire le maximum de choses.
Je pense aussi qu’une 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 m’y prendre.
merci encore d’avance
a+

Reply

Marsh Posté le 16-12-2005 à 10:19:57    

avmtptortri a écrit :

une fois le code acheve, l’implementerai sur l’hardware developpe.  


 
Ahhh... tu es sur de l'embarqué. La problématique est très différente.  
 

avmtptortri a écrit :

Je pense aussi qu’une 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 m’y 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.

Reply

Marsh Posté le 19-12-2005 à 16:34:15    

merci bien !
j'espere m'en sortir!

Reply

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.

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

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