- C语言调用汇编函数
- 1.Keil创建项目
- 2.代码
- 3.编译调试运行
- 修改原汇编语言 Init_1函数
- 1.代码修改
- 编译调试运行
- 汇编函数中调用一个 C语言函数
- 1.修改代码
- 2.编译调试运行
- 参考文献
右键Source Group 1文件创建Func.s与main.c
main.c
#includeextern void Init_1(void); int main(){ Init_1 (); return 0; }
Func.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 END3.编译调试运行
编译结果:
调试视频:
哔哩哔哩:嵌入式系统 STM32 C语言调用汇编函数调试1
结果符合代码预期,R1,R2 从初值“0”循环加“1”,直至R1的值等于“10”时退出循环,R1,R2的值变为10。
修改原汇编语言 Init_1函数1.代码修改修改参考代码,要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。请编程实现,并仿真跟踪调试;
main.c
#includeextern void Init_1(int x); int main(){ Init_1 (0); return 0; }
Func.s
AREA My_Function,CODE ,READonLY EXPORT Init_1 Init_1 ADD R0,#100 END编译调试运行
编译结果:
调试图片及视频:
哔哩哔哩:嵌入式系统 STM32 C语言调用汇编函数调试2
结果符合预期,传入整型数“0”,函数运行后返回整型数“0+100”,即100,存放在寄存器R0中。
main.c
#includeextern void Init_1(void); int main(){ Init_1 (); return 0; } int get(){ return 10; }
Func.s
AREA My_Function,CODE ,READonLY EXPORT Init_1 import get Init_1 MOV R1,#0 MOV R2,#0 LOOP CMP R1,#10 BHS LOOP_END ADD R2,#1 ADD R1,#1 BL get B LOOP LOOP_END NOP END2.编译调试运行
编译结果
调试结果
哔哩哔哩:嵌入式系统 STM32 C语言调用汇编函数调试3
结果符合预期,汇编函数调用c语言get函数成功 ,R0的值变为10。
参考文献- [1] Keil下STM32的c与汇编语言混合编程



