私は C を初めて使用し、C を使用した組み込み処理の世界に夢中になりました。char*
整数と浮動小数点数 (解像度は 0.01 のみ) を 8 ビット インターフェイスの LCD 画面に変換して出力する必要があります。私はいくつかの投稿を読んでいて、これらすべての変換に関する素晴らしいアイデアを見てきましたがint
、float
それらchar*
で何が起こっているのか正確にはわかりません.
誰かが私の2つのクエリと少しの説明の方法を提供できますか?
実際には標準ライブラリに依存しており、一部の組み込みシステムでは、そのライブラリが部分的に実装されているか、存在しない場合さえあります。完全に標準的な C99実装では、次のようなことができます
char buf[40];
int i;
double x;
// compute i & x, then make a string from them with::
snprintf(buf, sizeof(buf), "i=%2d x=%.2f", i, x);
次に、それbuf
を LCD ポートに送信するかstrdup
、後で使用するために送信します。(使用するstrdup
場合は、結果が必要になりますfree
)。
詳細については、 snprintfのドキュメントを参照してください。おそらく、 の戻りint
値をテストする必要がありsnprintf
ます。
組み込みプログラミングに取り組んでいるので、標準の変換では多くの場合、プロセッサに非常に負担のかかる除算が使用されるという事実に注意する必要があります。
整数は 10 除算を使用して変換されるため、代わりに、不変整数による乗算を使用して除算を実装できます。この方法では、除算を使用して値の 1 桁を変換するのにかかる時間で、ほとんどの値を変換できるはずです。
浮動小数点の場合、次の手順を使用します。
小数点以下 2 桁が必要な例を次に示します。
3758.3125
375831.25 (multiply by 10^2)
375831.75 (add 0.5)
375831 (convert to integer)
"375831" (convert to string)
"3758.31" (insert decimal point => final result)
もう少し難しいケース
-0.0625
0.0625 (keep sign)
6.25 (multiply by 10^2)
6.75 (add 0.5)
6 (convert to integer)
"6" (convert to string)
"006 (insert ascii 0 as required)
"-006" (insert minus sign)
"-0.06" (insert decimal point => final result)