ARM Cortex-M架构CPU中C语言和汇编语言的混合编程

这里主要从3个方面讲一下C和汇编的混合编程,包括相互之间的函数调用

  • 1 汇编代码中调用C函数

在汇编中调用C的函数,需要在汇编中IMPORT 对应的C函数名,然后将C的代码放在一个C文件中进行编译

我们以下面的SystemInit 系统初始化函数为例,下图是系统初始化的C语言代码

首先通过import把SystemInit导入进来SystemInit在这里代表的是函数的入口地址,然后 LDR R0, =SystemInit,将函数地址写到R0里面

再通过BLX R0跳转到R0里面执行

     IMPORT  __main
     IMPORT  SystemInit ;系统初始化函数
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

 

  • 2 C代码中调用汇编函数

上面我们演示了如何在汇编中调用C,用了IMPORT导入函数给汇编调用,那么反过来C代码中调用汇编函数,我们就要用到EXPORT导出函数给C语言

				EXPORT	ADD_OPT
ADD_OPT FUNCTION					
				ADD R0, R0,#1
				BX LR
				ENDFUNC

然后在C语言中用extern声明函数,就可以调用

extern int ADD_OPT();

 int main(void)
{
	int i=0;
	i=i+1;
	
	ADD_OPT();
}

 

  • 3 C代码中直接加入汇编语句

需要用到两个下划线:“__+asm{}”用法如下:
嵌入的汇编语句

__asm

{
    ADDS R0,R1
    
    BX LR
     
}

内联的汇编语句

__asm
{
    ADDS i,#1
}

 

物联沃分享整理
物联沃-IOTWORD物联网 » ARM Cortex-M架构CPU中C语言和汇编语言的混合编程

发表评论