我正在为SAM 3 N arm cortex-M3微控制器编写一个C程序。当我尝试打印浮点数时,它只打印“f”。示例:printf("%f",43.12);
只打印f
,不打印43.12
。
但是打印整数可以很好地工作。
如何启用浮点数的完整打印?我知道编译器默认情况下禁用浮点数打印以减少代码大小(看起来他们链接了精简版)。另外请注意,makefile中没有使用CFLAGS=-Dprintf=iprintf
。
工具详情:
- ARM/GNU C编译器:(交叉工具-NG 1.13.1 - Atmel构建版本:13)第4.6.1节
- 以上工具随Atmel studio 6.0提供。
4条答案
按热度按时间busg9geu1#
你能试试在链接器设置中添加以下选项吗
-lc -远程监视器-u _打印_浮点
我在ARM-CORTEXM 0中也很成功
r8uurelv2#
这可能是因为你的平台/库不支持
printf/sprintf
的%f
说明符。作为第一种方法,你可以滚动你自己的printf来表示float/double:3qpi33ja3#
在默认情况下禁用浮点数的编译器中,默认库可以处理它们是不常见的。浏览你的参考文献,你会发现如何重新编译支持浮点数的适当库的信息,或者(更可能的是)在哪里找到已经用它构建的版本。
yfjy0ee74#
@Agnius Vasiliauskas的答案部分正确,它没有考虑v为负且大于-1(-1〈v〈0)的情况,事实上在这种情况下intPart前面应该有一个负号。
例如:if is v = -0.55 intPart将为0,所以您将打印0.55而不是-0.55!您必须手动添加正确的符号,如下所示。