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版本