目录
一、新建项目
二、编写代码并编译
三、生成hex文件并分析hex文件
四、调试
五、总结
六、参考文献
1. 创建project
2. 输入所创建的工程名并保存
4. ARM
的 CMSIS
已经把开发所需要的软件组件都封装好了,因此直接选择即可—— CMSIS
下选择 CORE
;Device
下 Startup
(其中包含了启动文件),然后点击ok
5. 在所建立的工程下找到Source Group 1 鼠标单击右键选择Add New Item to Group 'Source Group 1'...
6.点击 Asm Files (.s)
添加汇编文件,然后输入文件名,并点击 Add
7.编写代码
编写如下代码:
AREA MYDATA, DATA
AREA MYCODE, CODE
ENTRY
EXPORT __main
__main
MOV R0, #10
MOV R1, #11
MOV R2, #12
MOV R3, #13
;LDR R0, =func01
BL func01
;LDR R1, =func02
BL func02
BL func03
LDR LR, =func01
LDR PC, =func03
B .
func01
MOV R5, #05
BX LR
func02
MOV R6, #06
BX LR
func03
MOV R7, #07
MOV R8, #08
BX LR
8.仿真器设置
在 Output
界面下,勾选 Create HEX File
,才能生成 hex 文件
在 Debug
界面下,选择 Use Simulator(没有硬件只能做仿真),具体根据自己的实际情况进行选择
9. 仿真
10. 生成hex文件
11.用记事本打开hex文件
11.1分析hex文件
Hex文件可以按照如下的方式进行拆分来分析其中的内容:
例如:
:020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA
第一个 0x02 为数据长度。
紧跟着后面的0x00 0x00 为地址。
再后面的0x04为数据类型,类型共分以下几类:
'00' Data Record//数据记录
'01' End of File Record//文件结束记录
'02' Extended Segment Address Record//扩展段地址记录
'03' Start Segment Address Record//开始段地址记录
'04' Extended Linear Address Record//扩展线性地址记录
'05' Start Linear Address Record//开始线性地址记录
然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。
11.2hex文件中的数据部分
Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd...]cc
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字
每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:
内容 | 描述 | |
|
||
: | 每个Intel HEX记录都由冒号开头 | |
ll | 数据长度域,它代表记录当中数据字节(dd)的数量 | |
aaaa | 地址域,它代表记录当中数据的起始地址 | |
tt | 代表HEX记录类型的域,它可能是以下数据当中的一个:00(数据记录) 、01(文件结束记录) 、02(扩展段地址记录) 、04(扩展线性地址记录) |
|
dd | 数据域,它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符 | |
cc | 校验和域,它表示这个记录的校验和(校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足) |
Intel HEX文件由任意数量以回车换行符结束的数据记录组成
这里我们随便拿一条数据记录分析,比如第二条吧
内容 | 描述 | |
---|---|---|
|
||
10 | 这个记录当中数据字节的数量 | |
0000 | 数据将被下载到存储器当中的地址 | |
00 | 记录类型(数据记录) | |
0006…0008 | 数据 | |
0A | 这个记录的校验和 |
11.3 文件尾
文件尾在文件的最后一排具有标志性的结束方式::00000001FF
内容 | 描述 |
---|---|
00 | 记录的长度为 0 |
0000 | LOAD OFFSET为0000 |
01 | TYPE = 01 |
FF | 校验和为FF |
12. 进行调试前的相关设置
点击魔法棒,调出Options for Target 'Target 1'界面,在其中点击Debug;
选中Use Simulator,选中Run to main(); 在下面的Dialog DLL:空白处填入DARMSTM.DLL,在Parameter:空白处填入-pSTM32F103VE(此处芯片名称与上述工程选择的芯片名称必须一致);
最后点击OK,准备完成
13. CTRL+F5进入调试页面
可以看到此时的值跟我们程序中设置的值不一样。
进行断点调试,最后结果正确。
由于硬件设备没有到位,仅仅建立起了环境和基本的调试,期待接下来将程序烧到硬件板上。
一:https://blog.csdn.net/m0_58892312/article/details/120437289
二、基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容_ssj925319的博客-CSDN博客