简单说说这篇文章的背景
最近在学习RTOS,找了FreeRTOS来练手。开发环境是Keil5.37版本,用的是ARM Compiler 6。根据FreeRTOS的移植文档操作,无法通过编译。因此写下这份笔记。
简单说说ARM Compiler 6
相信大家对keil5中部署FreeRTOS都不陌生。但随着社区的发展,keil5的默认编译器已经从AC5(ARM Compiler 5)迭代到了AC6(ARM Compiler 6)。我们直接根据FreeRTOS里portable/keil(RVDS)里的文件移植,已无法通过AC6的编译,原因我将会在下文中回答。
AC5的编译器为ARMCC,而AC6的编译器为ARMCLANG。AC6带来的升级有很多,例如编译速度有质的提升。但同时许多AC5的编译指令,也不再适用于AC6。
具体变动可以查看文档:https://www.keil.com/appnotes/files/apnt_298.pdf
因此,如果想要在AC6中编译FreeRTOS,则需移植支持ARMCLANG编译指令格式的文件,该文件在portable/gcc中。
只需要将portable/RVDS中的文件,替换为portable/gcc中的文件,就可以从AC5切换至AC6。
结语
目前许多老工程都是使用AC5编译,其中不乏许多汇编写的功能函数。而keil从5.37之后的版本将不再预装AC5,AC6将会渐渐成为主流。因此对汇编的学习对于裸机嵌入式软件工程师来说将会是必要的。