STM32
直播中

djfldsthtr

8年用户 961经验值
擅长:光电显示
私信 关注
[问答]

请问stm32中printf整形和浮点型会进入硬件错误中断的原因?

请问STM32中printf整形和浮点型会进入硬件错误中断的原因?

回帖(1)

李超然

2021-12-1 09:13:10
printf("%d,%lf",i+1,0.2);这样用,会进入硬件错误中断
printf("%d,%f,%f",i+1,0.2,0.3);这样也会
double dbl=0.2;
printf("%f",dbl);也不行
printf("%5f",dbl);也不行

连着打印两个float或者double型变量就可以printf("%f%f",dbl,dbl2);,反之就是很多异常,解决方法如下,把使用微库给勾上吧,这样应该就能很好的支持printf float,double等类型了,补充一下,打印出来的都是6位小数,加了%lf也是6位,可能stm32的printf是阉割版吧,只支持最多float型的打印位数了





我后来又试了,函数返回值也变成了float后,不勾选使用微库,打印
float timeRunVzop;
timeRunVzop = MeasureTimeEnd();//此函数的返回值类型改为了float型
printf("%d,%f",i+1,timeRunVzop);//此时就不报错了,看来还是double型有bug的原因

如果改为:
double timeRunVzop;
timeRunVzop = MeasureTimeEnd();
printf("%d,%f",i+1,timeRunVzop);//又会进入硬件错误中断

说明了,看来还是double型有bug的原因,单片机和keil mdk对double型支持不是很友好呀,得注意,少使用double型,尽量使用float型即可
举报

更多回帖

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