【单片机】 知道函数的地址怎么调用?

2025-04-25 04:34:32
推荐回答(4个)
回答1:

还需要知道函数的调用规则,比如:
int fun1(int a,int b) { return a+b; }
int fun2(int a,int b) { return a-b; }
typedef int (*pfun)(int,int);
#define MYFUNCTION1 0x80002000 //假设函数fun1的地址位于0x80002000
#define MYFUNCTION2 0x80003000 //假设函数fun2的地址位于0x80003000
void main()
{ int a=2,b=1,c;
fun=(pfun)MYFUNCTION1; c=(*fun)(a,b);
fun=(pfun)MYFUNCTION2; c=(*fun)(a,b);
}

回答2:

定义一个函数指针

回答3:

比如函数void UsartConfiguration(),调用时这样main() {UsartConfiguration();}就行了。

回答4:

编译器把r7,r6,作为传递参数的专用寄存器,传入单字节char,就把参数放在7中,传入int就高放7低放6,如果函数最后返回值了就把返回值放在a中。这些知识一般在和汇编混合编程时候用到。纯c语言就不用考虑了。