嵌入式技术论坛
直播中

其实znvm

8年用户 1110经验值
擅长:电源/新能源
私信 关注
[问答]

printf打印浮点数前后半部分时间输出不一样这是为什么

1.jpg

回帖(11)

陈伟

2022-8-22 14:28:41
用 snprintf 转换到内存,然后使用 rt_kprintf
举报

其实znvm

2022-8-22 14:28:58
我用了这个函数转换,跟LOG()一样。到后面那个小数点就消失了。
举报

陈伟

2022-8-22 14:29:09
你用的是 printf 函数,这个不敢说是哪儿引起的。很奇怪,底层处理怎么刚好把点号丢了。
但是对于浮点数打印 snprintf 转换目前是最可靠的
举报

其实znvm

2022-8-22 14:29:28
1.jpg

2.jpg
3.jpg
举报

陈伟

2022-8-22 14:29:39
这么神奇?后面仨变量的值可以添加到表达式吗?他们都是正常的?
举报

其实znvm

2022-8-22 14:29:51
是的,后面的值是正常的。就是打印出来不正常。不过我已经解决了。以前是RT官方的好像不能打印浮点数,后来修改了底层的rt_vsnprintf()为vsnprintf()可以正常输出浮点数,可能是后来升级了,又不能很好支持了。突然发现又换回RT官方的rt_vsnprintf()就又正常了。
举报

陈伟

2022-8-22 14:30:01
如果你是改过这里,可能是多线程的原因,无论是 snprintf 还是 rt_vsnprintf 都没有多线程竞争保护。
举报

其实znvm

2022-8-22 14:30:08
我猜也是线程不安全引起的。
举报

张杰

2022-8-22 14:30:20
放大100倍,用整形打印
举报

其实znvm

2022-8-22 14:30:28
感谢。方法知道的,提出这个事情,就是想知道LOG()本身存在BUG,还是操作不对。
举报

杨福林

2022-8-22 14:30:37
可能是内存问题,增大堆栈空间可以解决打印没有小数点的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分