当前位置: 首页 > news >正文

Keil(ARMCC)编译改为Cmake(GNU)编译

1. 环境介绍:

  1. 某款ARM-M4芯片(应该芯片通用)
  2. cmke+GNU+Ninja(CLion)

2. 必备:

  1. 芯片启动文件   startup_xxxx.s
  2. 链接文件    xxxx_flash.ld
  3. 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版本

http://www.dtcms.com/a/92622.html

相关文章:

  • 行业白皮书2025 | 益企研究院:AI时代的存储基石
  • 多源最短路:Floyd算法の暴力美学
  • 读书笔记-如何有效求助-1/2--求助行为的有效姿态
  • PyBluez2 的详细介绍、安装指南、使用方法及配置说明
  • F1C200S编译
  • STM32基础教程——PWM驱动舵机
  • Maya到SubstancePainter再到UE5
  • Android电话监听器的设计与实现:深入解析Service与TelephonyManager
  • 细胞内与细胞间网络整合分析!神经网络+细胞通讯,这个单细胞分析工具一箭双雕了(scTenifoldXct)
  • [ ] 前后端连接 结合常见故障场景和解决
  • 【区块链 + 文化版权】精灵高中 IP 服务项目 | FISCO BCOS 应用案例
  • 大模型适配昇腾300I DUO服务器出现的错误
  • 【BFS染色问题】P1162填涂颜色例题+核心逻辑
  • 企业级基于SpringBoot的MQTT的构建和使用
  • Qt开发:QFontDialog的使用
  • Android开发BasePagerAdapter
  • 第四章:优化字符串的使用:案例研究_《C++性能优化指南》notes
  • springboot整合couchbase(集群)
  • 3. 轴指令(omron 机器自动化控制器)——>MC_GearOut
  • 计算机二级WPS Office第七套WPS演示
  • C++vector常用接口和模拟实现
  • 缺省路由配置出接口不能ping通对面路由器的环回接口,但是配置下一跳可以的原因
  • 【Hugging Face 开源库】Diffusers 库 —— 扩散模型
  • 消息队列保证最终一致性的优势
  • Rust 学习笔记(一)
  • NanoGraphrag原理和数据流讲解
  • OkHttps工具类的简单使用
  • Linux上位机开发实践(开源框架和开源算法)
  • 【大模型学习】什么是具身智能
  • 力扣刷题22. 括号生成