问题:在startup.s中增加函数,由c程序调用,以此取得汇编中相关参数的设置值。(获取PLL中m,p值,c程序调用汇编函数)
在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现。
在汇编里面,用EXPORT 把C语言定义的函数名引进来,再开始编写函数名开始的段
实现:
c程序调用:
extern int m();
extern int p();
汇编程序:
AREA M, CODE, READONLY EXPORT m m LDR R0, = PLLCFG_Val AND R0,0x0000001F ADDS R0,R0,#1 BX LR AREA P, CODE, READONLY EXPORT p p LDR R0, = PLLCFG_Val MOV R1,#0x00000003 ANDS R0,R1,R0,LSR #5 BX LR //返回 END |
参考:点击打开链接
例子:一个六个数相加的函数。
AREA EXAMPLE,CODE,READONLY EXPORT sum ENTRY sum ADD R0,R0,R1 ADD R2,R2,R3 ADD R0,R0,R2 LDR R4,[SP] //从堆栈里读第四个参数 LDR R5,[SP,#4] //从堆栈里读第五个参数 ADD R4,R4,R5 ADD R0,R4,R0 BX LR END
其实关键的问题是参数和返回值。
我们能看到,C里面调用这个函数,C给里面传参数。
汇编是怎么接受这些参数的呢?
4个以内的参数,直接存放在R0~R3 这4个寄存器里面。
4个以后的参数放在堆栈里。
如果函数有返回值,那么返回值放在R0里。