7

SAM3N arm cortex-M3 マイクロコントローラ用の C プログラムを書いています。浮動小数点数を出力しようとすると、「f」だけが出力されます。例:ではなく、printf("%f",43.12);印刷fのみ43.12

しかし、整数での印刷はうまくいきます。

フロートの完全な印刷を有効にする方法は? 私は、コンパイラがデフォルトでフロート印刷を無効にしてコードサイズを縮小していることを知っています(つまり、縮小バージョンをリンクしているようです)。CFLAGS=-Dprintf=iprintfまた、makefile には使用されていないことに注意してください。

ツールの詳細:

  • ARM/GNU C コンパイラ: (crosstool-NG 1.13.1 - Atmel ビルド: 13) 4.6.1
  • 上記のツールは Atmel studio 6.0 に付属しています。
4

3 に答える 3

9

リンカー設定で以下のオプションを追加してみてください

-lc -lrdimon -u _printf_float

そしてそれはARM-CORTEXM0で私のために働いた

于 2014-09-08T12:12:22.740 に答える
4

%fプラットフォーム/ライブラリがのフォーマット指定子をサポートしていない可能性がありますprintf/sprintf。最初のアプローチとして、float/double に対して独自の printf をロールすることができます。

void printDouble(double v, int decimalDigits)
{
  int i = 1;
  int intPart, fractPart;
  for (;decimalDigits!=0; i*=10, decimalDigits--);
  intPart = (int)v;
  fractPart = (int)((v-(double)(int)v)*i);
  if(fractPart < 0) fractPart *= -1;
  printf("%i.%i", intPart, fractPart);
}
于 2012-10-03T08:11:03.773 に答える
0

float がデフォルトで無効になっているコンパイラでは、デフォルトのライブラリがそれらを処理できるのは異常です。リファレンスに目を通してみると、float サポートを使用して適切なライブラリを再コンパイルする方法、または (より可能性が高い) 既にビルドされているバージョンを見つける場所に関する情報が見つかります。

于 2012-10-03T07:36:01.670 に答える