STM32的C与汇编语言混合编程实例
文章目录
1 题目
在第二篇(基于MDK创建STM32汇编语言程序并分析其HEX文件)STM32汇编语言编程与仿真调试的基础上,继续学习Keil下STM32的C与汇编语言混合编程。任务:
参考附件资料,完成C语言调用汇编函数;
修改参考代码,要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。 请编程实现,并仿真跟踪调试;
如果要求在汇编函数中调用一个 C语言写的函数,应该如何修改汇编代码?
2 编写代码
2.1 创建项目,并添加c语言程序和汇编语言程序。
方法如下:
项目→新μVision项目,命名并保存。
2.2 添加文件,配置环境
选中Source Group 1并右击→单击**Add New Item to Group’Source Group 1’…**→添加 .s文件,再以相似的方式添加 .c 文件。
配置环境:
单击 “魔法棒”!
按照图片中顺序修改选项:
分别编写 .s 文件和 .c 文件。
2.3 代码
.s 代码:
AREA My_Function,CODE,READONLY ;这一行必有,除了My_Function可以自己命名以外,其他都是模板。
EXPORT Init_1 ;与在.c文件中定义的Init_1函数关联起来
;高级语言中的声明和使用变量其实是对板子寄存器的使用,所以我们只需要直接使用寄存器即可。
Init_1
MOV R1,#0 ;设R1的寄存器是i
MOV R2,#0 ;设R2的寄存器是j
LOOP ;写在最左边的是程序段的段名,执行跳转程序时要用到
CMP R1,#10 ;比较R1和10的大小
BHS LOOP_END ;如果R1大于或等于10,则跳转到LOOP_END程序段;反之忽略该语句,直接执行下面的语句。
ADD R2