IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Keil环境下创建STM32汇编语言工程并分析HEX文件内容 -> 正文阅读

[嵌入式]Keil环境下创建STM32汇编语言工程并分析HEX文件内容

本文内容:在Keil嵌入式开发环境下,完成一个基于STM32汇编程序的编写,并进行动态调试;观察最终生成 hex 文件的各段的大小,以及 hex 文件前 8 个字节内容,解释其含义。

目录

一、在Keil环境下创建新项目

1.新建工程

?

?

2.添加源文件

二、代码编写,编译与调试

1.代码编写

2.程序编译

?3.程序调试

三、分析生成的HEX文件

1.扩展线性地址记录

2.数据部分

3.文件尾

四、总结

五、参考文献


一、在Keil环境下创建新项目

1.新建工程

点击?Project?——>?New uVision Project?创建新项目

命名文件并保存

选择芯片,这里我选的是STM32F103VE,然后点击OK

CMSIS?下选择?COREDevice?下?Startup(其中包含了启动文件),选完后点击OK

2.添加源文件

右击?Source Group 1?,点击?Add New Item to Group 'Source Group 1'...

选择文件类型,这里我们点击?Asm Files (.s)?添加汇编文件,然后输入文件名,并点击?Add

点击Source Group 1左边的加号,看到test.s,添加成功

二、代码编写,编译与调试

1.代码编写

在?Test.s中添加如下的汇编代码

 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

2.程序编译

先进行一些初始设置,点击 Options for Target...

?在Output界面下,勾选?Create HEX File,才能生成 hex 文件

Debug界面下,勾选?Use Simulator,因为在后面我们要进行虚拟调试,后OK?保存设置

点击Rebuild进行编译

编译成功,没有错误

?3.程序调试

点击右上角图标进入调试界面

运行后发现程序一直不能跳到主函数,存在错误

查询发现在Debug中Dialog的设置出错,详见该文章:

error 65: access violation at 0x40021000 : no 'read' permission_记录每一次成长-CSDN博客https://blog.csdn.net/beready/article/details/24668529我们需要修改Dialog和右侧Parameter如下图

??

再次调试运行,结果符合预期,寄存器?R5R6R7R8?的值和程序设置一致,具体如下图所示:

?

三、分析生成的HEX文件

用记事本打开hex文件,是一串十六进制字符

?

1.扩展线性地址记录

扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录

这些记录包含数据地址的高 16 位

扩展线性地址记录总是有两个数据字节,外观如下(这里我通过标记方便对应原始数据):

:020000040800F2

内容描述
02这个记录当中数据字节的数量
0000地址域,对于扩展线性地址记录,这个域总是 0000
04记录类型 04 (扩展线性地址记录)
0800是地址的高 16 位
F2是这个记录的校验和,计算方法:01h + NOT(02h + 00h + 00h + 04h + 08h + 00h)

当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 Intel HEX 文件读取来的随后的记录

线性地址保持有效,直到它被另外一个扩展地址记录所改变

通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址

2.数据部分

Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd...]cc

每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字

每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:

:llaaaatt[dd…]cc

内容描述
:每个Intel HEX记录都由冒号开头
ll数据长度域,它代表记录当中数据字节(dd)的数量
aaaa地址域,它代表记录当中数据的起始地址
tt代表HEX记录类型的域,它可能是以下数据当中的一个:00(数据记录)01(文件结束记录)02(扩展段地址记录)04(扩展线性地址记录)
dd数据域,它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符
cc校验和域,它表示这个记录的校验和(校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足)

3.文件尾

在文件的最后一排,是一个文件的结束标志:

:00000001FF

内容描述
00记录的长度为 0
0000LOAD OFFSET为0000
01TYPE = 01
FF校验和为FF

四、总结

总之,在Keil环境下创建STM32汇编语言工程还是相对简单的,不过在调试的过程中也遇到了一些问题,感谢大佬的文章帮助我解决问题。小小新人,还存在很多不足,欢迎斧正

五、参考文献

基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容_ssj925319的博客-CSDN博客目录一、新建工程参考资料本文内容:参考作业附件或者博客 “ 基于MDK创建纯汇编语言的STM32工程 ”,在 Keil 下完成一个汇编程序的编写,学习动态调试变量;并注意观察最终生成 hex 文件的各段的大小,以及 hex 文件前 8 个字节内容,解释其含义。一、新建工程点击 Project ——> New uVision Project 创建新项目输入工程名并保存这里我选择的是 STM32F103VE 芯片,然后点击 OKARM 的 CMSIS 已经把开发所需要的软件组件都封https://blog.csdn.net/ssj925319/article/details/111868500?error 65: access violation at 0x40021000 : no 'read' permission_记录每一次成长-CSDN博客https://blog.csdn.net/beready/article/details/24668529

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:20:39  更:2021-09-26 10:21:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:44:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码