嵌入式ARM下keil汇编的简单使用


前言

我们生活中处处都有单片机,可以说我们现在的生活是离不开单片机的,生活中的许多东西都需要单片机,比如说空调、冰箱、洗衣机、扫地机器人等等。今天我们就来学习一下ST公司的stm32单片机,学习keil环境下汇编语言的简单使用。


一、MDK环境的搭建

因为我之前就已经使用过keil-mdk这个软件,以及配置好相关的环境,所以我这里就不说环境的搭建了,有需要的同学请自行在网上找教程,我也会提供软件百度网盘资源。

百度网盘链接 :

https://pan.baidu.com/s/17SjKkVAz1Lyboj48hefGLA

提取码: keil

二、Keil下的第一个汇编工程

1、创建一个工程文件

1、建议在自己方便的目录下创建一个工程文件,以后所有的工程文件都放在这,方便移植和管理。

注意! 所有的目录不要带有中文路径,不然后面会有许多问题

在这里插入图片描述
2、新建工程

  • 点击Project
    在这里插入图片描述

  • New uVision Project
    在这里插入图片描述

  • 给工程取个名字保存在上面创建的工程文件夹下(不要有中文)
    在这里插入图片描述

  • 选择芯片型号,这里选择stm32c8t6
    在这里插入图片描述

  • 将CMSIS下的CORE和Device下的Startup勾选上
    在这里插入图片描述
    3、添加工程.s源文件

  • 右击Source Group1添加文件
    在这里插入图片描述

  • 添加.s汇编文件
    在这里插入图片描述

2、完成相关代码的编写

  • 将以下代码写入.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
  • 先编译一下,看是否有什么错误

在这里插入图片描述
在这里插入图片描述
可以看到,我们这里出现了一个错误,Undefined symbol main ……

通过我的检查,我发现我并没有把我创建的.s 源文件添加到我的工程目录下,所以才会报错说没有定义 main 函数,一定要仔细点。

在这里插入图片描述

  • 在编译前其实我们应该对一些编译器的默认设置做一些修改

点击魔法棒,在Output中的的Create HEX File勾选上,这是生成hex文件的,hex文件也是最后烧写到单片机里面的可执行文件。

在这里插入图片描述

  • 进行debug调试
    在这里插入图片描述

三、HEX文件的分析

  • 在我们的工程文件下找到hex文件,并用编辑器打开。
    在这里插入图片描述

文件第一排 :020000040800F2 拓展线性地址记录
02 :记录数据字节的数量
0000 :扩展线性地址的记录,地址域
04 :记录类型 04
0800 :地址的高16位
F2 :记录的校验和

  • hex文件末尾

00000001FF
00 : 记录的长度
0000 : Load offset为0000
01 : TYPE = 01
FF : 检验和为FF


总结

通过本次在keil下汇编语言的学习我觉得我还是挺有收获的,首先学会了一些比较简单的汇编语法,之前都没接触过汇编语言。其次,在这次的实验过程中我也有遇到一些问题,不过都是一些细节上的问题,比如说我创建的那个源文件刚开始没注意,并没有添加到工程文件中去,导致编译一直不通过,后面经过检查才发现,下次注意不要再犯就行了!

猜你喜欢

转载自blog.csdn.net/wer4567/article/details/127206503