Récupération des données d'un fichier .hex

Récupération des données d'un fichier .hex - C - Programmation

Marsh Posté le 14-04-2010 à 16:24:53    

Bonjours a tous,  
J'ai un fichier .hex comme suit :  
 
:100000000C9472000C948B000C948B000C948B005D  
:100010000C948B000C948B000C948B000C948B0034  
:100020000C948B000C948B000C948B000C948B0024  
:100030000C948B000C948B000C948B000C948B0014  
:100040000C948B000C948B000C948B000C948B0004  
 
et je voudrais faire une fonction pour récupéré juste les données souligné dans mon buffer,  
mais je n'arrive pas a construire la fonction permettant de le réaliser, c'est pour quoi je demande votre aide.  
Je vous remercie d'avance pour l'attention que vous porterez a mon problème :)

Reply

Marsh Posté le 14-04-2010 à 16:24:53   

Reply

Marsh Posté le 14-04-2010 à 16:52:07    

Utiliser fopen, fgets ou fread, fclose.

Reply

Marsh Posté le 14-04-2010 à 16:59:36    

le soucie c'est que j'utilise un ATMEGA2560 au plus bas niveau, donc je ne peux pas utiliser les fgets et printf...
je ne peux qu'utiliser putchar et getchar, mais je ne sais pas par ou commencer et comment... =s

Reply

Marsh Posté le 15-04-2010 à 10:28:16    

j'ai réaliser ce petit bout de programme qui est censser utiliser un tableau a double dimension pour récupéré les octets voulut, mais il ne fonctionne pas telement, quelqu'un pourrais me dire ce qui ne va pas svp?
 

Code :
  1. if (toto >= 718) /* lorsque j'ai tous les octets du fichier envoyer */
  2.  {
  3.   for(i=0; i<718; i++)
  4.   {
  5.    indice=0;
  6.    for(j=0;j<NBR_LIGNES;j++) /* temps qu'il y a des lignes dans le fichier */
  7.    {
  8.     indice+=9; /* je saute les 9 premier octets */
  9.     for(y=0;y<33;y++) /* boucle pour prendre les 33 octets de données*/
  10.     {
  11.        donnees[i][y]=buffer[indice]; /* indice prend la valeur du tableau */
  12.        indice++;
  13.     }
  14.     indice+=2; /* saute les 2 dernier octets */
  15.    }
  16.    putchar1(donnees[j][y]); /* affichage des données */
  17.   }
  18.   toto=0;
  19.  }

Reply

Marsh Posté le 15-04-2010 à 11:48:02    

Voir mes deux remarques.

 
Code :
  1. if (toto >= 718) /* lorsque j'ai tous les octets du fichier envoyer */
  2.  {
  3.   for(i=0; i<718; i++)
  4.   {
  5.    indice=0;
  6.    for(j=0;j<NBR_LIGNES;j++) /* temps qu'il y a des lignes dans le fichier */
  7.    {
  8.     indice+=9; /* je saute les 9 premier octets */
  9.     for(y=0;y<33;y++) /* boucle pour prendre les 33 octets de données*/
  10.     {
  11.        // **** j et non i dans ce qui suit je pense
  12.        donnees[i][y]=buffer[indice]; /* indice prend la valeur du tableau */
  13.        indice++;
  14.     }
  15.     indice+=2; /* saute les 2 dernier octets */
  16.    }
  17.    // **** C'est  surement faux ici, vu qu'on est sorti des boucles en j et y
  18.    putchar1(donnees[j][y]); /* affichage des données */
  19.   }
  20.   toto=0;
  21.  }
 

A+,

 


Message édité par gilou le 15-04-2010 à 11:48:32

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-04-2010 à 14:37:40    

J'ai trouver le soucie, je ne prener pas en compte le caractère de saut de ligne et de retour chariot qui ne son pas visible =/
 

Code :
  1. if (toto >= 718)
  2.  {
  3.    indice=0;
  4.    for(j=0;j<NBR_LIGNES;j++)
  5.    {
  6.     indice+=9;
  7.     for(y=0;y<32;y++)
  8.     {
  9.        donnees[j][y]=buffer[indice];
  10.        indice++;
  11.     }
  12.     indice+=4;
  13.    }
  14.    for(j=0;j<NBR_LIGNES;j++)
  15.    {
  16.     for(y=0;y<32;y++)
  17.     {
  18.        putchar1(donnees[j][y]);
  19.     }
  20.     putchar1(0x0D);
  21.     putchar1(0x0A);
  22.    }
  23.   toto=0;
  24.  }


 
Maintenent je réalise une fonction de conversion ascii en hexa qui suit :
[cpp]unsigned char asciitohex(unsigned char C1, unsigned char C2)
 {
  if((C1 >= '0') & (C1 <= '9'))
   ret=C1 - 0x30;
  if((C1 >= 'A') & (C1 <= 'F'))
   ret=C1 - 0x41 + 10;
  if((C2 >= '0') & (C1 <= '9'))
   ret=C2 - 0x30;
  if((C2 >= 'A') & (C1 <= 'F'))
   ret=C2 - 0x41 + 10;
  C3 = C1+C2;
  return 0;
              }
 
mais je voudrais concaténé 2 octets ensembles, (ex : 0C9472000C948B000C948B000C948B00  
que les octets 0 et C forme un seul octet 0x0C)...

Reply

Sujets relatifs:

Leave a Replay

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