Keil(ARMCC)编译改为Cmake(GNU)编译
1. 环境介绍:
- 某款ARM-M4芯片(应该芯片通用)
- cmke+GNU+Ninja(CLion)
2. 必备:
- 芯片启动文件 startup_xxxx.s
- 链接文件 xxxx_flash.ld
- CMakeLists.txt
3. 具体修改步骤
第一步:观察启动文件
首先:使用任意打开工具打开芯片启动文件,观察启动文件是使用什么语法写的(ARM)/(GNU)
以下为对照表
两种开发环境下的汇编代码,有较多不同的点,主要是符号及伪操作的不同。
| ARM汇编的伪操作符 | GNU汇编的伪操作符 |
| INLCUDE | .include |
| NUM EQU 25 | .equ NUM, 25 |
| EXPORT | .global |
| IMPORT | .extern |
| DCD | .long |
| IF: DEF: | .ifdef |
| ELSE | .else |
| ENDIF | .endif |
| OR | | |
| SHL | << |
| RN | .req |
| GBLA | .global |
| NUM SETA 16 | .equ NUM , 16 |
| MACRO | .macro |
| MEND | .endm |
| END | .end |
| AREA WORD, CODE, READONLY | .text |
| AREA BLOCK, DATE, READWRITE | .data |
| CODE32 | .arm |
| CODE16 | .thumb |
| LTORG | .ltorg |
| % | .fill |
| ENTRY | ENTRY: |
| ldr x0,=0xff | ldr x0,=0xff |
第二步:修改启动文件
如果你的启动文件是GNU汇编文件,恭喜你不需要修改启动文件,如果不出意外链接文件也不需要修改。
如果你的启动文件是ARM汇编文件,有几种解决方案:
第一种解决方案
如果用的芯片为大厂生产或者市面流行的芯片,可以通过网络或者寻找原厂进行找寻GNU版本的启动文件与链接文件。
例如STM32这款芯片的任意型号的芯片,在STM官网都有任意版本的启动与链接文件。
第二种解决方案
如果实在找不到,那没办法,就只能手动修改启动文件与链接文件,我们根据上面的对应表进行修改,
ARM版本

GNU版本

