7

我正在为 SAM3N arm cortex-M3 微控制器编写 C 程序。当我尝试打印浮点数时,它只打印'f'。示例:仅printf("%f",43.12);打印f,不打印43.12.

但是用整数打印效果很好。

如何启用花车的完整打印?我知道编译器默认禁用浮点打印以减小代码大小(即,它们似乎链接了缩减版本)。另请注意,CFLAGS=-Dprintf=iprintfmakefile 中没有使用。

工具详情:

  • 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. 作为第一种方法,您可以滚动自己的 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

在默认情况下禁用浮点数的编译器中,默认库可以处理它们是不寻常的。查看您的参考资料,您将找到有关如何重新编译具有浮点支持的适当库的信息,或者(更有可能)在哪里可以找到已经使用它构建的版本。

于 2012-10-03T07:36:01.670 回答