基于MDK创建C与汇编语言混合编程

一、C语言嵌入汇编语言

  • C语言直观,易于我们理解,汇编语言效率高,计算机读取速度快,在C里面嵌入汇编是很好的选择。在之前已经讲解了如何基于MDK创建纯汇编语言的STM32工程,现在我们加入c语言实现混合编程。
  • 首先新建一个项目,然后设置好仿真调试
    在这里插入图片描述
  • 添加新项目
    在这里插入图片描述
  • 新建一个c语言文件main.c和一个汇编语言文件func.s,
    在这里插入图片描述
  • 写入代码
    main.c:
#include<stdio.h>
extern void Init_1();
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
	
	END

  • 在汇编函数那一行前设置断点,即可看到c语言调用汇编函数,如图:
    在这里插入图片描述
  • 以上我们已经实现了c语言嵌入汇编无参无返回值混合编程,现在我们试试有参有返回值的,将代码修改如下:
    main.c:
#include<stdio.h>
extern int Init_1(int);
int main(){
		int result=Init_1(10);
	return result;
}

func.s:

	AREA My_Function,CODE,READONLY
	EXPORT Init_1
		
Init_1
	ADD R0,R0,#100
	BX LR ;
	END

当汇编函数运行完之后,r0的值与我们所设想的一样为110,如下图:
在这里插入图片描述

二、汇编语言嵌入c语言

  • main3.s:
 AREA main,CODE,READONLY
	import addf
	ENTRY
	EXPORT __main

__main
	mov r0,#10 ;给两个参数赋值
	mov r1,#12
	bl addf ;调用函数
	end

fun3.c:

#include<stdio.h>
int addf(int a,int b){
	int result=a+b;
	return result;
}
  • 经过仿真调试,可以看到R0寄存器的与推出的值一样,为22
    在这里插入图片描述

三、总结

用keil5来试验c语言调用汇编语言和用汇编语言来调用c语言的过程都是一样的,无非就是调用的主体不同,不过汇编语言还是不太熟悉,需要进一步熟悉。


参考文献
STM32的C与汇编语言的混合编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值