Frage

Was ich machen will; was ich vorhabe zu tun:Verwandeln Sie die resultierende 16 -Bit -Nummer (nach dem Kombinieren der beiden 8 -Bit -#S) in eine Zeichenfolge, die mit meiner seriellen Sendungsfunktion verwendet werden soll

Das Problem:Bei der Verwendung von ITOA wird das Ergebnis negativ, sobald es den halben Punkt übergeht (vergeht vom 15. Bit bis 16.), sodass es im Wesentlichen das 16. Bit als Vorzeichenbit (nicht überraschend) verwendet, wo meine Nummer nicht signiert sein soll. Sprintf macht dies auch. Beachten Sie, dass Itoa (16) perfekt funktioniert, wie es sollte.

Die Hardware:ATMEGA16 MICRO -Prozessor (AVR C) 16 -Bit -Externe ADC, das über SPI -Bus verbunden ist (sendet ADC -Ergebnis als zwei 8 -Bit -Nummern)

Der Code:

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);

Das Ergebnis davon ist, dass es eine 15 -Bit -Signierung anstelle des ursprünglichen UINT16 druckt. Ich habe ITOA verwendet, um die Ergebnisse des 10 -Bit -internen ADC zu drucken, aber es bringt mich um, dass etwas so Einfaches mich so lange braucht.

Ich schätze deine Zeit sehr.

War es hilfreich?

Lösung

Wenn Sie Sprintf haben

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

Oder wenn Ihre INTs 16 Bit sind

sprintf(outString, "%u", ADC_result);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top