Z-stack回调函数及回调机制

来源:互联网 发布:java redis分布式教程 编辑:程序博客网 时间:2024/05/17 03:14

函数本是为调用者准备的美餐,其烹制者应对食客了如指掌,但实情并非如此。例如,写一个快速排序函数供他人调用,其中必包含比较大小。麻烦来了:此时并不知要比较的是何类数据--整数、浮点数、字符串?于是只好为每类数据制作一个不同的排序函数。更通行的办法是在函数参数中列一个回调函数地址,并通知调用者:君需自己准备一个比较函数,其中包含两个指针类参数,函数要比较此二指针所指数据之大小,并由函数返回值说明比较结果。排序函数借此调用者提供的函数来比较大小,借指针传递参数,可以全然不管所比较的数据类型。被调用者回头调用调用者的函数(够咬嘴的),故称其为回调(callback。即让某个系统函数调用的函数。因此可以得出结论:

1、回调函数是由开发者按照一定的原型进行定义的函数

2、回调函数并不由开发者直接调用执行

3、回调函数通常作为参数传递给系统API,由该API来调用。

4、回调函数可能被系统API调用一次,也可能被循环调用多次。

Z-stack里回调函数也非常常见。如在SerialApp中的串口回调,在HalUARTPoll( void )里有cfg->rxCB( ((cfg->flag & UART_CFG_U1F)!=0), evt )调用rxCB.

typedef void (*halUARTCBack_t) (uint8 port, uint8 event);

SerialApp.c中自定义了一个函数void rxCB( uint8 port, uint8 event )

又如在SampleApp例程中,KEY的回调函数的实现过程如下:

Z-stack回调函数及回调机制 - xoos - 笨笨的小猪猪

原创粉丝点击