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