注册函数最好在定义函数的.c文件中进行,放在初始化Init函数中,后面直接在主函数中调用初始化Init函数
1.关于回调函数的使用。
①大致的过程是在应用层或者主函数中,定义一个函数,将函数(函数名就是函数地址)赋给封装好的库里面的指针变量,我们下面这个例子就是通过调用库里面的注册函数
void KeyScanCBSRegister(pKeyScanCallBack *pCBS)
{
if(pKeyScanCBS == 0)
{
pKeyScanCBS = pCBS;
}
}
②对函数进行注册(将函数赋给函数指针) KeyScanCBSRegister(KeyScanHandle);
int main(int argc, char *argv[])
{
KeyInit();
KeyScanCBSRegister(KeyScanHandle);
KeyPoll();
return 0;
}
③库函数就会在有该指针的位置对注册函数进行调用pKeyScanCBS(keyVal,keyState);
void KeyPoll()
{
printf("Please Enter key value:");
if(scanf("%d",&keyVal)==1)
{
printf("\r\n");
printf("Please enter key state:");
if(scanf("%d",&keyState)==1)
{
if(pKeyScanCBS != 0)
{
pKeyScanCBS(keyVal,keyState);
}
}
}
}
④在主函数里面调用这个KeyPoll();就会对回调函数进行调用
int main(int argc, char *argv[])
{
KeyInit();
KeyScanCBSRegister(KeyScanHandle);
KeyPoll();
return 0;
}
#ifndef _KEY_H_
#define _KEY_H_
typedef enum
{
KEY1,
KEY2,
}KEY_ID_TYPEDEF;
typedef enum
{
KEY_IDLE, //空闲
KEY_PRESS, //按键短按
KEY_LONG_PRESS, //按键长按
KEY_RELEASE,//按键释放
}KEY_STATE_TYPEDEF;
typedef void (*pKeyScanCallBack)(KEY_ID_TYPEDEF KeyID,KEY_STATE_TYPEDEF KeyState);
void KeyInit();
void KeyPoll();
void KeyScanCBSRegister(pKeyScanCallBack pCBS);
#endif