yunfu1117 发表于 2025-5-14 11:00

如何在 printf 中使用 float?

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 是不带浮点支持的,确实是问题点。

童雨竹 发表于 2025-5-24 09:07

检查下是不是用的是 nano printf,要么关掉 nano,要么加上 float 支持。

万图 发表于 2025-5-24 09:08

如果你是用 HAL 库,可以在 syscalls.c 里用 __io_putchar 配合 printf 实现,记得 linker 也要改。

Wordsworth 发表于 2025-5-24 09:08

我一般都在 C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> Miscellaneous 里加 -u _printf_float。

Bblythe 发表于 2025-5-24 09:09

还有一种方法是直接不用 printf,用 sprintf 转成字符串再输出,更可控。

Pulitzer 发表于 2025-5-24 09:10

建议在 STM32CubeIDE 中新建项目后,立刻复制导入项目的 linker flags 和 startup 文件,很多默认值不同。

Uriah 发表于 2025-5-24 09:11

printf 支持 float 很消耗空间,如果只是调试可以考虑临时用,用完就注释掉。

Clyde011 发表于 2025-5-24 09:12

可以对比 .ioc 文件和 .ld 文件,看看新旧两个项目里 CubeMX 或 linker script 哪些地方设置不同。
页: [1]
查看完整版本: 如何在 printf 中使用 float?