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

本文详细解释了回调函数的概念及其应用场景,特别是在Z-stack中的使用实例。介绍了回调函数如何在开发者定义后,不由开发者直接调用,而是作为参数传递给系统API,再由API调用。并通过Z-stack的具体例子展示了回调函数的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值