Bug提示如下
../Drivers/CMSIS/Include/core_cm4.h(81): error: #35: #error directive: "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
![](https://img-blog.csdnimg.cn/eb5d0ad3b5d04166a118372cea2a7eb5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IC25b6L6Zi_6Imv,size_2,color_FFFFFF,t_70,g_se,x_16)
奇怪,为什么那块代码就不应该编译,为什么会报错呢?
而且,我明明已经定义
#define __FPU_PRESENT 1U /*!< FPU present
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a8451a0e3094b1e9943c433a8079f10.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IC25b6L6Zi_6Imv,size_2,color_FFFFFF,t_70,g_se,x_16)
进过一个晚上的,智障乱试,发现C语言编译器在编译头文件(.h)时,是按照它在C文件中出现的顺序来编译的。也就是说,它可能先编译的core_cm4.h,然后再编译stm32f405xx.h。这也就意味着,在编译core_cm4.h时,它不认为__FPU_PRESENT被宏定义了。
解决方法很简单,把stm32f405xx.h放到arm_math.h前面(doge)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6a11802c28a342de8cd58dfcd92f47c5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6IC25b6L6Zi_6Imv,size_2,color_FFFFFF,t_70,g_se,x_16)