嵌入式作业5
目录
- STM32的C与汇编语言混合编程
- 一、创建并调试项目
- 二、C语言调用汇编函数
- 三、汇编函数调用C语言
- 四、总结
- 五、参考资料
要求:修改参考代码,要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。请编程实现,并仿真跟踪调试。
一、创建并调试项目
-
open project
-
基础设置
-
新建main.c和test1.s
main.c#include
extern void Init_1(void); int main(){ Init_1(); return 0; } test1.s
AREA MY_FUNCTION,CODE,READonLY EXPORT Init_1 Init_1 MOV R1,#0 MOV R2,#0 LOOP CMP R1,#10 BHS LOOP_END ADD R2,#1 ADD R1,#1 B LOOP LOOP_END NOP END
-
编译
这里又遇到了 Target not creat. 的问题,可以参考我的上一篇博客解决。 -
完成!
- 设置断点
test1.s
#includeextern int Init_1(int x); int main(){ int a = Init_1(5); printf("%d", a); return 0; }
main.c
AREA MY_FUNCTION,CODE,READonLY EXPORT Init_1 Init_1 ADD R0,#100 MOV PC,LR LOOP CMP R1,#10 BHS LOOP_END ADD R2,#1 ADD R1,#1 B LOOP LOOP_END NOP END
- 调试
得到
十六进制105=69
三、汇编函数调用C语言-
设置断点
test1.s
AREA My_Function,CODE,READonLY EXPORT Init_1 import get5 Init_1 MOV R1,#0 MOV R2,#0 LOOP CMP R1,#10 BHS LOOP_END ADD R2,#1 ADD R1,#1 BL get5 B LOOP LOOP_END NOP END
main.c
#includeextern void Init_1(void); int get5(void); int main(){ Init_1(); return 0; } int get5(){ return 5; }
- 调试
得到
https://blog.csdn.net/qq_48641886/article/details/120710452?spm=1001.2014.3001.5502
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)