与 sprintf 中一样生成非零浮点数

问题描述 投票:0回答:1

我正在与 psoc Creator 合作,尝试将 -1 到 1 之间的浮点数打印到 I2C OLED。 为了实现这一点,我使用了 sprintf 函数。我将以下标志添加到我的链接器

-u _printf_float
,因为我使用的是 newlib-nano,如果没有要求,它会省略浮点处理代码。 (我的问题可能与此有关......也许?) 出于测试目的,我写了以下几行:

char stringbuffer[20];
sprintf(stringbuffer, "(%1.1f, %1.1f)", 1.1, 1.1);

在调试时,我注意到我尝试打印的每个非零浮点都被打印为垃圾,前面有一个空字符。实际上,每个非零浮点数都被以下 3 个字节替换。如果我将所有值替换为 0.0,则打印效果非常好。

0x00 '\000'
0x2E '.'
0x80 '\200'

我尝试在下一行中打印的整数的行为符合预期。

有人遇到类似问题吗?

c linker printf newlib psoc
1个回答
0
投票

我在 sprintf() 中遇到了同样的问题,使用启用了浮点支持的 newlib-nano。

该问题是由于堆空间不足引起的。 在 PSoC Creator 的 Workspace Explorer 窗格中,导航至 System。 展开“配置”,然后将堆大小(字节)从默认的 0x80 更改为 0x200。重建并运行。

© www.soinside.com 2019 - 2024. All rights reserved.