bigharpoon 发表于 2023-10-25 16:07:42

GCC编译STM32时,使用snprintf函数无法格式化float型数据的问题

最近在VSCODE+GCC环境下编译一段代码,目标芯片为F4系列。使用snprintf函数时,发现一个特别现象:启用nano C库(即链接选项加上-specs=nano.specs)时,无法格式为float型数据,格式化结果皆为0x00;禁用nano C库(即链接选项加上-specs=nosys.specs )时,就可以了,但是bin文件暴增30多KB。
请教坛友,如何做到在使用nano C库的时候,可以正常使用snprintf函数格式化float型数据?

uint8_t tempMxxBuf;
float tempvip;
int8_t testvar;

tempvip = (float)110.5;
testvar = snprintf(tempMxxBuf,sizeof(tempMxxBuf),"%4.1f",tempvip);

上述代码,正常格式化后,tempMxxBuf = {0x31,0x31,0x30,0x2e,0x35};testvar = 5;
格式化失败后,tempMxxBuf = {0x00};testvar = 0x90;

Himem 发表于 2023-10-25 16:35:01

-u _printf_float
-u _scanf_float

bigharpoon 发表于 2023-10-25 17:05:39

真是自古人才出二楼!
加入链接选项-specs=nano.specs -u _printf_float后,就正常了。
试了下,-u _printf_float和-u _snprintf_float还是有些区别,前者可以,后者不行!

Himem 发表于 2023-10-25 17:25:10

本帖最后由 Himem 于 2023-10-25 17:39 编辑

bigharpoon 发表于 2023-10-25 17:05
真是自古人才出二楼!
加入链接选项-specs=nano.specs -u _printf_float后,就正常了。
试了下,-u _printf ...
(引用自3楼)

没n,symbol是固定的,snprintf内部还是用_printf_float(weak),
link时用-u强制链接上
页: [1]
查看完整版本: GCC编译STM32时,使用snprintf函数无法格式化float型数据的问题