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

Embedded 使用printf打印float/double会使程序崩溃,embedded,printf,powerpc,newlib,Embedded,Printf,Powerpc,Newlib,我正在为PowerPc实现一个系统调用。 我已经测试了一些gcc函数,它们似乎都能工作(例如sqrt sin cos pow printf malloc…) 我最近意识到printf有一个问题。只要我打印一些整数/字符,它就可以正常工作,但当我试图打印f%f/lf以打印浮点/双精度时,程序崩溃。(它似乎在某个不应该在的地方执行) 我已经检查了makefile,它使用: # use soft float CFLAGS += -msoft-float 在制作程序时,我可以看到许多nof(无浮动)库

我正在为PowerPc实现一个系统调用。 我已经测试了一些gcc函数,它们似乎都能工作(例如sqrt sin cos pow printf malloc…)

我最近意识到printf有一个问题。只要我打印一些整数/字符,它就可以正常工作,但当我试图打印f%f/lf以打印浮点/双精度时,程序崩溃。(它似乎在某个不应该在的地方执行)

我已经检查了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会崩溃的原因仍然存在吗?

您的新库可能是在不支持浮点IO的情况下构建的。这在嵌入式系统中相当常见,因为它节省了大量的代码空间。您可能可以重建newlib以支持浮点IO。我认为配置选项是
--启用newlib io float
--启用newlib io long double
。您可能可以通过运行
/configure--help

系统调用实现来确定答案?内核空间或用户空间??我没有使用newlib,但我使用过其他嵌入式C库,并且有类似的问题。printf()仍然存在,可以处理整数和字符串IO。只是printf()无法解析%f说明符,也无法处理浮点参数。