打印
[其他ST产品]

如何在 printf 中使用 float?

[复制链接]
333|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yunfu1117|  楼主 | 2025-5-14 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
printf 中的 float 似乎不适用于在 stm32cubeide 中创建的新项目
我在 sw4stm32 中创建一个项目,可以正常,如果我导入 sw4stm32 项目到cubeide ,也可以正常工作,如果我在 cubeide 中创建新项目,就不起作用了
在所有情况下都使用选项 -u _printf_float,但在新的 cubeide 项目的情况下,此设置会以某种方式被忽略,并且包含错误的 prinf,在 mapfile 中可见
导入的项目../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard\libc_nano.a(lib_a-nano-vfprintf_float.o)
bad(新项目):../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard\libc_nano.a(lib_a-printf.o)
还没找到原因

使用特权

评论回复
沙发
公羊子丹| | 2025-5-24 09:05 | 只看该作者
CubeIDE 新建项目确实默认没启用 -u _printf_float,需要手动添加到 linker flags。

使用特权

评论回复
板凳
周半梅| | 2025-5-24 09:05 | 只看该作者
除了 -u _printf_float,建议也加上 -u _scanf_float,防止后续 scanf 用到 float 出问题。

使用特权

评论回复
地板
帛灿灿| | 2025-5-24 09:06 | 只看该作者
看 map 文件的话,你说的那个 lib_a-printf.o 是不带浮点支持的,确实是问题点。

使用特权

评论回复
5
童雨竹| | 2025-5-24 09:07 | 只看该作者
检查下是不是用的是 nano printf,要么关掉 nano,要么加上 float 支持。

使用特权

评论回复
6
万图| | 2025-5-24 09:08 | 只看该作者
如果你是用 HAL 库,可以在 syscalls.c 里用 __io_putchar 配合 printf 实现,记得 linker 也要改。

使用特权

评论回复
7
Wordsworth| | 2025-5-24 09:08 | 只看该作者
我一般都在 C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> Miscellaneous 里加 -u _printf_float。

使用特权

评论回复
8
Bblythe| | 2025-5-24 09:09 | 只看该作者
还有一种方法是直接不用 printf,用 sprintf 转成字符串再输出,更可控。

使用特权

评论回复
9
Pulitzer| | 2025-5-24 09:10 | 只看该作者
建议在 STM32CubeIDE 中新建项目后,立刻复制导入项目的 linker flags 和 startup 文件,很多默认值不同。

使用特权

评论回复
10
Uriah| | 2025-5-24 09:11 | 只看该作者
printf 支持 float 很消耗空间,如果只是调试可以考虑临时用,用完就注释掉。

使用特权

评论回复
11
Clyde011| | 2025-5-24 09:12 | 只看该作者
可以对比 .ioc 文件和 .ld 文件,看看新旧两个项目里 CubeMX 或 linker script 哪些地方设置不同。

使用特权

评论回复
12
gaonaiweng| | 2025-5-31 17:59 | 只看该作者
新创建的 STM32CubeIDE 项目默认链接的是不带浮点支持的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

24

帖子

0

粉丝