1

やりたいこと: 結果の 16 ビットの数値 (2 つの 8 ビット # を結合した後) を、シリアル送信関数で使用する文字列に変換します。

問題: itoa を使用すると、中間点 (15 番目のビットから 16 番目のビットまで) を通過すると結果が負になるため、基本的に 16 番目のビットを符号ビットとして使用します (当然のことです)。 . sprintf もこれを行います。itoa(16) は正常に動作することに注意してください。

ハードウェア: atmega16 マイクロ プロセッサ (AVR c) SPI バス経由で接続された 16 ビット外部 ADC (ADC 結果を 2 つの 8 ビット数値として送信)

コード:

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

この結果、元の uint16 の代わりに 15 ビットの署名が出力されます。私は itoa を使用して 10 ビットの内部 ADC の結果を出力してきましたが、この単純な処理に非常に長い時間がかかっているのが残念です。

お時間をいただき、誠にありがとうございます。

4

1 に答える 1

3

sprintf がある場合

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

または、int が 16 ビットの場合

sprintf(outString, "%u", ADC_result);
于 2013-11-07T23:07:34.360 に答える