使用printf打印float / double会导致程序崩溃

时间:2011-07-29 13:02:36

标签: embedded printf powerpc newlib

我正在为 PowerPc 开展系统调用实施。 我已经测试了一些gcc函数,它们似乎都可以工作(例如sqrt sin cos pow printf malloc ...)

我最近意识到 printf 存在问题。只要我打印一些整数/ char它就可以正常工作但是当我尝试printf %f / lf 来打印float / double时程序崩溃了。 (它似乎在不应该执行的某个地方执行)

我检查了makefile,它使用:

# use soft float
CFLAGS += -msoft-float

在制作程序时,我可以看到很多 nof (没有浮动)库被链接。

gnu/powerpc-eabi/3pp.ronetix.powerpc-eabi/bin/../lib/gcc/powerpc-eabi/4.3.3/../../../../powerpc-eabi/lib/nof\libm.a)lib_a-s_sin.o

我也知道我在堆栈/堆中有足够的空间,所以这应该不是问题。 打印浮动时, printf 应该崩溃还有原因吗?

1 个答案:

答案 0 :(得分:3)

你的newlib可能是在不支持浮点IO的情况下构建的。这对于嵌入式系统来说相当普遍,因为它节省了大量代码空间。您可以重建newlib以支持浮点IO。我认为配置选项为--enable-newlib-io-float--enable-newlib-io-long-double。您可以通过运行./configure --help来确定。