看了一些文章,一些书,大概明白了回调是怎么回事,以下想法可能随着知识丰富慢慢变化。
表面上看来,回调函数只是一个普通的调用,似乎其和一般的函数传参调用也无差异。但是,
函数的调用形式一般是
变量名 = 函数名(实参列表)
而回调函数一般是在结构体中,通过一个SetCallBack() 对结构体成员进行设置,然后在逻辑上调用结构体时,可以调用他的回调函数。
这样的好处就是分层,使得驱动层和应用层不用直接关联,增加了代码的兼容性,移植性等。
两个例子以供理解:
在Free RTOS中软件定时器的回调函数:
//Defines the prototype to which timer callback functions must conform
typedef void (* TimerCallbackFunction_t)( TimerHandle_t xTimer ); //设置回调形式
pxNewTimer->pxCallbackFunction = pxCallbackFunction; //设置调用的地方
设置网卡数据的处理回调函数:
typedef void (*NetInputProcessCallback)(char c);//设置回调的形式
static NetInputProcessCallback g_fNetInputProcessCallback;
void SetNetInputProcessCallback(NetInputProcessCallback func) //一般在,状态机,初始化等请换下进行设置
{
g_fNetInputProcessCallback = func;
}