我正在与 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'
我尝试在下一行中打印的整数的行为符合预期。
有人遇到类似问题吗?
我在 sprintf() 中遇到了同样的问题,使用启用了浮点支持的 newlib-nano。
该问题是由于堆空间不足引起的。 在 PSoC Creator 的 Workspace Explorer 窗格中,导航至 System。 展开“配置”,然后将堆大小(字节)从默认的 0x80 更改为 0x200。重建并运行。