stm32中printf整形和浮点型会进入硬件错误中断

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型即可,具体可以看我这篇文章stm32 keil MDK 调试窗口变量查看遇到的问题记录(重要!!!)

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页