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

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

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

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

STM32的C与汇编语言混合编程
  • C语言调用汇编函数
    • 1.Keil创建项目
    • 2.代码
    • 3.编译调试运行
  • 修改原汇编语言 Init_1函数
    • 1.代码修改
    • 编译调试运行
  • 汇编函数中调用一个 C语言函数
    • 1.修改代码
    • 2.编译调试运行
    • 参考文献

C语言调用汇编函数 1.Keil创建项目

右键Source Group 1文件创建Func.s与main.c

2.代码

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,#0
	MOV R2,#0
	
LOOP
		CMP R1,#10
		BHS LOOP_END
		ADD R2,#1
		ADD R1,#1
		B LOOP
		
LOOP_END
		NOP
		
		
		END
3.编译调试运行

编译结果:

调试视频:

哔哩哔哩:嵌入式系统 STM32 C语言调用汇编函数调试1

结果符合代码预期,R1,R2 从初值“0”循环加“1”,直至R1的值等于“10”时退出循环,R1,R2的值变为10。

修改原汇编语言 Init_1函数

修改参考代码,要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。请编程实现,并仿真跟踪调试;

1.代码修改

main.c

#include
 
extern 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中。

汇编函数中调用一个 C语言函数 1.修改代码

main.c

#include
 
extern 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
		
		
		END
2.编译调试运行

编译结果

调试结果
哔哩哔哩:嵌入式系统 STM32 C语言调用汇编函数调试3

结果符合预期,汇编函数调用c语言get函数成功 ,R0的值变为10。

参考文献
  • [1] Keil下STM32的c与汇编语言混合编程
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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