Conversion de int en chaîne pour AVR ATmega32

Khadija

Conversion de int en chaîne pour AVR ATmega32


J’essaie de lire les données de l’ADC et de les afficher sur un écran LCD compatible HD44870 avec un ATmega32. Comme les données de l’ADC sont un entier non signé 10 bits, l’écran LCD attend une chaîne, une conversion est nécessaire. Vous trouverez ci-dessous la fonction que j’ai écrite pour effectuer cette conversion.

 char   * int_to_str ( uint16_t  num ,   uint8_t  len ){ 
     uint8_t  i ; 
     char   * str ; str [ len ]= '' ; 
     for ( i =( len - 1 );  i >= 0 ;  i --){ str [ i ]   =   '0'   +  num %   10 ; num /= 10 ; 
     } 
     return  str ; 
 } 

Cependant, la fonction ci-dessus ne fonctionne pas. Je reçois juste un écran vide où les chiffres doivent être affichés. J’utilise actuellement itoa () et cela fonctionne. Cependant, je préférerais écrire le mien car la taille de l’exécutable résultant est critique. Je vous remercie.

jippie

Vérifiez sur sprintf() . Vous confondez la manipulation d’entiers et de chaînes.

Brian Drummond

sprintf utilise probablement itoa en interne et est probablement plus grand.

Phil Frost

Pourquoi pensez-vous que l’écriture de votre propre implémentation d’ itoa() sera plus petite?

Réponses


 Gustavo Litovsky

Il n’y a aucune raison pour que sprintf ne fonctionne pas. Cela imprime essentiellement une chaîne dans un tampon au lieu d’une sortie standard.

Par exemple

 char  string [ 256 ]; 
 int  value =   5 ; memset ( string , 0 , sizeof ( string [ 0 ])* 256 );   // Clear all to 0 so string properly represented sprintf ( string , "Value: %d" , value ); 

la chaîne contiendra désormais la chaîne « Valeur: 5 »


 QuadCorei8085

Votre façon de gérer les chaînes est incorrecte. Vous venez de créer un pointeur de variable de pile vers une chaîne qui n’est pas initialisée et ne pointe pas vers une chaîne de longueur valide.

Déclarez str comme str[len] et essayez de cette façon.

JimmyB

Votre premier paragraphe est correct et résout probablement correctement le problème d’origine. Mais « Déclarez str comme str[len] et essayez de cette façon » est un gros refus lorsque vous renvoyez un pointeur vers cette variable (locale!) Plus tard, comme l’OP a l’intention de le faire, voir return str; .

 

#de, #en, #pour, ATmega32, AVR, chaîne, Conversion, int

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *