|
C和汇编混合编程的一点经验之谈
本人在调试混合编程的程序时,苦于资料太少,结果折腾了两天才调通。对于混合编程的方法初有体会,不敢独享,特发此贴,以飨众网友。
C调用汇编有两种方法,一是直接在C中插入汇编语句,而是用汇编编写一个子程序,供C调用。方法一适用于类似看门狗复位这样的只需一两句汇编就能完成的场合;方法二更为通用,比如用汇编编写延时子程序,就能实现精确延时。下面讨论一下方法二的注意事项。
1。函数声明: C中在函数前加extern声明此函数为外部函数,在汇编中要声明函数名为全局变量,如:
extern void delay(void) ; /*in C*/
globl delay ; in asm
_delay: ; delay function begins
2 参数传递 :一般是用寄存器传递参数的,比如ImageCraft,就用人R16,R17,R18,R19充电输入参数,用R16,R17传递返回结果。如果返回结果需要多个字节才能表示,最好用SRAM充电结果,即在汇编中,把结果存入SRAM中,在C中读取相应的地址。
3 保存寄存器。 一些寄存器在调用子程序时,内容是不能被改变的,这些寄存器称为Reserved register,如果汇编子程序用到了这些寄存器,就要在程序入口出将它们入栈,程序返回时再出栈。 |
|