搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 2023-10-25 16:07:42 | 显示全部楼层 |阅读模式
最近在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[32];
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;

出0入984汤圆

发表于 2023-10-25 16:35:01 | 显示全部楼层
-u _printf_float
-u _scanf_float

出0入0汤圆

 楼主| 发表于 2023-10-25 17:05:39 | 显示全部楼层
真是自古人才出二楼!
加入链接选项-specs=nano.specs -u _printf_float后,就正常了。
试了下,-u _printf_float和-u _snprintf_float还是有些区别,前者可以,后者不行!

出0入984汤圆

发表于 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强制链接上
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 14:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表