网上很多教程都有写stm32如何开启FPU,比如这篇(https://blog.csdn.net/Stduo/article/details/78669079),写的比较详细,但是时代在进步,当我们使用新版的mdk配上arm complier v6版本后,v5版本的一些内容可能就要做更改
我在使用arm complier v6按照教程开启fpu,遇到一些问题,故在此和大家分享一下。
首先按照我贴的那篇文章中所写,需要以下操作:
在C/C++选项卡中添加__FPU_PRESENT=1,__TARGET_FPU_VFP,ARM_MATH_CM4,__CC_ARM,并使用英文符逗号隔开
- __FPU_PRESENT=1 //打开FPU
- __TARGET_FPU_VFP //要求编译出的文件使用FPU功能
- ARM_MATH_CM4 //没有”ARM_MATH_CM4”符号,在编译时将会提示找不到”armcm4.h”文件
- __CC_ARM //__CC_ARM是不同编译器的编译配置宏定义,__CC_ARM就是代表MDK开发环境
————————————————
按照以上步骤配置完成后,使用arm complier v6编译会报出大量错误,基本都是下图中的错误。
那么为什么呢,在mdk Arm Complier Migration and Compatibility 6.12中可以看到v5和v6版本的不同,
如下,
可以看到,v5版本是使用armcc编译,而v6版本使用的是基于Clang和LLVM的armclang,所以你在C/C++中定义__CC_ARM,使用v6编译,肯定会报错,
故我们将定义更改为__CLANG_ARM,如此就可以解决了。
同时可以看到,在mdk的pack自带的core_cm4.h中,有如下代码:
故如果想开启fpu,只需定义ARM_MATH_CM4,__FPU_PRESENT,__ARM_FP,__CLANG_ARM就可以了