背景:最近使用STM32Cubemx生成freertos工程编译很慢,从ARMCompiler5.06升级至ARMCompiler6.19的过程记录。
一、MDK版本与ARMCompiler6.19的升级
开始我的MDK版本是5.33,ARMCompiler是5.06,经过查询后得知MDK版本需要升级,我选择了5.3.7版本。ARMCompiler添加了6.19版本的编译器。
二、MDK版本的升级
在有旧版本的前提下,我这里直接双击安装,注:!!!安装路径要与旧版本相同!!!相当于升级。具体安装步骤不在陈述。
三、添加编译器ARMCompiler6.19
解压后双击安装,安装路径建议选择KEIL安装路径下RAM文件夹中新建文件夹
例:E:\Keil5\ARM\ArmCompiler6.16
四、KEIL导入编译器6.19
导入路径即步骤三的ARMCompiler6.19安装路径。
如果导入提示错误,这里给几个方向供参考:
1、ARMCompiler6.19安装路径不在KEIL\ARM文件夹下
2、MDK版本过低
3、重启电脑
4、另请高明
可以看到已经有了6.19的编译器,这里已经成功一半了。此时在CUBEMX生成代码已经可以编译过了。但是:生成FREERTOS的代码编译一大堆错误。具体解决看步骤五。
五、CubeMX生成的FreeRTOS的port.c、portmacro.h不支持GNU,内部有大量的内联汇编,需更换为GCC版本。
此处参考了这位老哥的博客。
【Keil】CubeMX配置的FreeRTOS利用V6编译出错_use default compiler version 6-优快云博客
解决方案一共有两种:
1、将GCC的port.c、portmacro.h把工程内部RVDS的port.c、portmacro.h替换掉,但是不能一劳永逸,下次生成代码会将port.c、portmacro.h文件重新替换为RVDS的。
2、一劳永逸版,将固件库的RVDS的port.c、portmacro.h替换掉为GCC的port.c、portmacro.h。即使下次生成也是从固件库复制到工程里。
我们选择第二种。
路径可从cubemx这里获取
RVDS路径
C:\Users\用户名\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.1\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F
GCC路径
C:\Users\用户名\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.1\Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F
将GCC的粘贴至RVDS下,替换掉后重新生成代码
可以看的到FREERTOS文件夹存在,选用6.19版本编译器。
当当当
教程结束。