栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

一、C语言调用汇编函数

 二、将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100

三、在汇编函数中调用一个c语言写的函数

四、总结

五、参考文献


一、C语言调用汇编函数

先在项目下新建两个文件main.c和Func.s 

 

 main.c 和Func.s的代码如下

main.c

#include

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,#666
	MOV R2,#888
	
LOOP
    CMP R1,#10
	BHS LOOP_END
	ADD R2,#1
	ADD R1,#1
	B LOOP
	
LOOP_END
    NOP
	
	END

然后再进行编译调试

 

 

 从运行的结果可以看出C语言成功调用了汇编语言,左上方的寄存器R1 R2也会遵循汇编程序的语法,从零开始一个一个的递加,直到R1等于10结束。

 二、将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100

将main.c中的Init_1(void)中的void改为int x

在建立新的func.s文件

AREA My_Function,CODE,READonLY
	EXPORT Init_1

		
Init_1
    ADD R0,R0,#100
	
	
	END

再编译运行

在寄存器R0处显示出了6E,而6E就正好是16进制的110,我们的所设置的整数为10 x+10就等于110

三、在汇编函数中调用一个c语言写的函数

我们将main.c改为

​
#include
extern int sum(int a,int b);
int sum(int a,int b){
  int c;
	a=10;
	b=10;
	c=a+b;
	return c;
}

 func.s改为

	import sum
 AREA MYCODE, CODE

	EXPORT __main

__main

    BL sum
	
	
	END

然后再编译运行

然后可见在寄存器R0处得出了14的结果,在程序里面是设定为10+10得出100的结果,而14就是16进制的20,

四、总结

本次实验学习了在stm32的环境下用c和汇编语言混合编程,对其有了一定的了解,在整个过程中还是遇到了恨多的问题,在参考几位大佬之后最终得以完成。

五、参考文献

https://blog.csdn.net/qq_58174923/article/details/120677821

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号