【问题标题】:printing float/double using printf crashes the program使用 printf 打印 float/double 会使程序崩溃
【发布时间】:2011-10-15 22:56:10
【问题描述】:

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

我最近意识到 printf 存在问题。只要我打印一些整数/字符,它就可以正常工作,但是当我尝试 printf %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 在打印浮点数时崩溃还有原因吗?

【问题讨论】:

  • 系统调用实现?内核空间还是用户空间??

标签: embedded printf powerpc newlib


【解决方案1】:

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

【讨论】:

  • 我没有使用过 newlib,但我使用过其他嵌入式 C 库并且遇到了类似的问题。 printf() 仍然存在并且可以处理整数和字符串 IO。只是 printf() 无法解析 %f 说明符,也无法处理浮点参数。
猜你喜欢
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
相关资源
最近更新 更多