Keil下STM32的C与汇编语言混合编程

一、keil的配置

1)参考帖子

看另一个帖子,有项目创建和芯片的环境配置:ARM汇编基础基于Keil创建STM32汇编程序的编写,创建项目和环境配置后就可以进行下面步骤了。

2)创建文件

1.这里需要创建两个文件,一个c语言和汇编语言的。
在这里插入图片描述
2.源代码
main.c

#include<stdio.h>
extern 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
	
	END

二、C语言嵌入汇编语言

1)实现调用函数(无参数)

1.先编译,编译成功后调试:
在这里插入图片描述
2.调试一下,我们点击F10,观察左边R1,R2的变化:
在这里插入图片描述
3.变化后,结果符合代码预期,R1,R2 从初值“0”循环加“1”,直至R1的值等于“10”时退出循环,R1,R2的值变为10:
在这里插入图片描述

2)原汇编语言 Init_1函数的类型改为 int Init_1(init)

1.修改代码
main.c

#include<stdio.h>

extern void Init_1(int x);

int main(){
	Init_1 (10);
	return 0;
	
}

Func.s

 AREA My_Function,CODE ,READONLY
 EXPORT Init_1
		
Init_1
 
	ADD R0,#100

2.调试,编译,16进制0x6E换算成10进制就是110(100+10):
在这里插入图片描述
最后结果符合代码预期,函数传入整型数“0”,函数运行后返回整型数“0+100”,即100,存放在寄存器R0中。

三、汇编语言调用C语言函数

1)编写代码

main.c里实际写了一个函数:

#include<stdio.h>
int add(int x,int y)
{
	int p = x+y ;
	return p ;
	
}

Func.s里是程序:

	AREA My_Function,CODE ,READONLY
	IMPORT add
	ENTRY
    EXPORT main
		
main
    MOV R0,#10
	MOV R1,#20
	BL add
	END

2)调试

经过仿真调试,可以看到R0寄存器的与推出的值一样为30:
在这里插入图片描述

四、总结

了解了在汇编中使用c的函数调用和在c中使用汇编函数调用,主要是对汇编语言有了一点理解,和里面参数传递过程的学习。

五、参考链接

keil:C语言里面调用汇编程序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值