Domanda

Cosa voglio fare:Trasforma il numero 16 bit risultante (dopo aver combinato i due # #8 bit) in una stringa da utilizzare con la mia funzione di invio seriale

Il problema:Quando si utilizza ITOA, il risultato diventa negativo una volta che passa il punto a metà strada (passando dal 15 ° bit al 16 °), quindi sta essenzialmente usando il 16 ° bit come bit di segno (non sorprendente) in cui il mio numero dovrebbe essere senza segno. Anche Sprintf lo fa. Si noti che Itoa (16) funziona perfettamente, come dovrebbe.

L'hardware:ATMEGA16 Micro Processor (AVR C) ADC esterno a 16 bit collegato tramite bus SPI (invia il risultato ADC come due numeri a 8 bit)

Il codice:

uint16_t ADC_result = ADC_data_LSB | (ADC_data_MSB<<8); // Combine both halves of the data
unsigned char *outString = "0123456789abcdef";
itoa(ADC_16_result, outString, 10);
send_A_String(outString);

Il risultato di questo è che stampa un firmato da 15 bit anziché l'originale UINT16. Ho usato ITOA per stampare i risultati dell'ADC interno a 10 bit, ma mi sta uccidendo che qualcosa di così semplice mi sta prendendo così tanto tempo.

Apprezzo molto il tuo tempo.

È stato utile?

Soluzione

Se hai Sprintf

char outString[10];
sprintf(outString, "%hu", ADC_result);

Oppure, se i tuoi int sono 16 bit

sprintf(outString, "%u", ADC_result);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top