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 }