|
发表于 2011-3-19 17:27:05
|
显示全部楼层
汇编中直接调用C中定义好的函数就可以了。
以AVR为例:
/* main.c ------------------------------------------*/
#include <avr\io.h>
void func1(void)
{
asm("NOP");
}
int func2(char arg1, char arg2)
{
return (256U + arg1 + arg2);
}
/*func_asm在test_asm.s中实现*/
/*int func_asm(char arg)
{
func1();
return (10 + func2(arg, 100));
}
*/
extern int func_asm(char arg);
/*Main function*/
int main(void)
{
func_asm(1);
while(1){
}
return (0);
}
/*--------------------------------------------------*/
/* test_asm.s --------------------------------------*/
.global func_asm
.extern func1, func2
func_asm:
push r28
std Y+1, r24
rcall func1 ;调用在在main.c中定义的void func1(void)
ldi r22, 100 ;arg2 参数传递
ldd r24, Y+1 ;arg1 参数传递
rcall func2 ;调用在在main.c中定义的int func2(char arg1, char arg2)
adiw r24, 10 ;返回值在r24中, +10返回
pop r28
ret |
|