下面是我的理解,如果大家有空,请帮我看看是否正确,谢谢
- //interrupt.h 文件,由甲方编写
- #ifndef INTERRUPT_H
- #define INTERRUPT_H
- void interrupt(void);
- void CallBackRegister(void(*func2)());
- #endif
- //interrupt.c //模拟单片机中断文件,由甲方编写
- #include "interrupt.h"
- static void (*func3)(); //定义函数指针变量(产生代码,非声明)
-
- //==============================
- void CallBackRegister(void(*func2)()) { //定义注册函数,给乙方使用
- func3 = func2; //记忆乙方的函数地址,这就是回调函数注册
- }
- //==============================
- void interrupt(void) {
- void (*func)(); //定义局部函数指针变量
- func = func3; //将上面注册进来的地址赋值测试
- func(); //通过指针,运行被调用的函数
- add(); //普通方式,直接调用函数
- }
- //==============================
- /*
- 请教:
- 1:
- 请问,这里的甲方是不是(必须)要定义一个本文件的全局函数指针变量 func3
- 然后,注册函数 CallBackRegister 和 中断函数 interrupt 共用这个变量,
- 这样甲方才能"知道"和"运行"乙方传进来的函数
- 2:
- 我在代码上的注释是否正确,因为它代表了我的理解。谢谢
- */
- //main.c //main.c 文件,由乙方编写
- #include <stdio.h>
- #include "interrupt.h"
- //==============================
- void add(void) { //定义被调用的函数,这个函数叫“回调函数”
- static int test; //测试变量
- test++; //变量++
- printf("test=%d\n", test); //输出显示
- }
- //==============================
- int main(void) { //用户(乙方)的主函数
- CallBackRegister(add); //注册回调函数,就是把add函数的地址告诉甲方
- interrupt(); //模拟单片机进入中断服务函数
- return 0;
- }
- //end
|