御神楽的学习记录之STM32的C与汇编语言混合编程


前言

Keil项目中既可以使用c语言编写,也可以使用汇编语言。C语言直观,汇编效率高,C里面嵌入汇编是很好的选择


提示:以下是本篇文章正文内容,下面案例可供参考

一、Keil中的C语言与汇编语言混合编程

1.创建项目文件

1) 在Keil中创建main.cFunc.s文件,创建完成后结构如下图:
在这里插入图片描述

2.编写代码

1) 编写main.c代码:

#include<stdio.h>

extern void Init_1(void);

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

2) Func.s汇编代码编写:

AREA My_Function,CODE,READONLY
	EXPORT Init_1
		
Init_1
   
   MOV R1,#0  ;R1-->i
   MOV R2,#0  ;R2-->j
   
LOOP
   CMP R1,#10
   BHS LOOP_END
   ADD R2,#1 ;j++
   ADD R1,#1 ;i++
   B LOOP
   
LOOP_END
   NOP
   
   END
}

3.调试

F5调试程序,可以看到R1R2寄存器会从0不断累加1,直到为A时,退出循环
在这里插入图片描述
在这里插入图片描述

二、修改代码并调试

1.代码修改

1) main.c代码:

#include<stdio.h>

extern void Init_1(int x);

int main(){
	
	 int xx=Init_1(25)
	
	return 0;
}

2) Func.s汇编代码

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

   BX LR
   
   END

2.调试

调试
在这里插入图片描述
可以看到将25=0x19移到寄存器R0中
在这里插入图片描述
继续运行可以看到R0寄存器变为了125=0x7d,即25+100.

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

编写c语言函数Func.c

#include<stdio.h>
extern int sum(int a,int b);
int sum(int a,int b){
  int c;
	a=50;
	b=50;
	c=a+b;
	return c;
}

编写汇编函数main.s

 AREA MYDATA, DATA
	IMPORT sum
 AREA MYCODE, CODE
	
	EXPORT __main

__main

    BL sum
	
	BX LR
	
	END

调试结果可以发现,R0寄存器为目标c的值,即为50+50=100=0x64

在这里插入图片描述


总结

通过汇编语言与c语言的相互配合使用,可以更加灵活的解决代码问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值