起因
在使用STM32F4时发现浮点运算很慢,按道理自带FPU的F4运算的应该比较快。同时由于自己电脑用默认的编译器V5编译实在是太慢,编译一次要两三分钟,于是换成编译器V6了。
查了些资料,发现没开FPU……
问题
有前人写的博客提到如何开启FPU,在这里提一下,编译器V5的适用于这种情况:
https://blog.csdn.net/jaysur/article/details/108928490
https://blog.csdn.net/yuyan7045/article/details/121076181
然而我这里是编译器V6,直接套用报错找不到__asm,肯定是编译器的问题……
如下图,头文件中没有定义__CC_ARM 以及下面的一些宏定义,FPU没开。但如果按照上面链接提到的方法,编译器V6不能定义__CC_ARM
编译器的不同
根据
https://blog.csdn.net/ybhuangfugui/article/details/99826708
中提到的编译器差异,有一些不兼容的问题,可以看到编译器V6适用GNU.正好,在这个core_cm4.h中有这一段:
于是我照样画葫芦把宏定义填了进去
,__VFP_FP__,__FPU_PRESENT=1U,ARM_MATH_CM4
这样就可以了,测试验证发现计算速度快了一倍多
使用注意
STM32适用于单精度浮点运算,所以在代码里面要有特别标识
不加f的话可能默认成double