微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > ZDO_beaconNotifyIndCB这个函数是怎么调用的

ZDO_beaconNotifyIndCB这个函数是怎么调用的

时间:12-23 整理:3721RD 点击:

我在看ZSTack-LL程序,ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB )将函数zll_BeaconIndCB赋给了zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID],再有ZDO_beaconNotifyIndCB函数执行zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID]( (void*)pBeacon )语句调用,但我找不到什么地方调用了ZDO_beaconNotifyIndCB,请问这个函数是在哪里调用的,谢谢了!

ZDO_beaconNotifyIndCB函数根本搜索不到调用,是不是封装在库文件的?如果是封装在库文件的话,ZDO_RegisterForZdoCB是怎样调用到的?

ZDO_beaconNotifyIndCB是被extern void NLME_beaconNotifyInd(NLME_beaconInd_t *pBeacon);调用的,这个函数是以库函数的方式提供的,当收到beacon后,有网络层把beacon数据传给事先注册好的函数,对beacon进行处理。

callback函数是在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册的,注册的地方在void zll_PerformNetworkDisc( uint32 scanChannelList )

这么说的话,在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,就应该执行*zll_BeaconIndCB ( void *param )这个函数,对吗?

注册callback函数并不是注册了就马上调用,而是当你注册的该函数对应的事件发生的时候才会调用callback函数,

在这里注册的是beacon notify的callback函数,也就是当收到beacon数据帧的时候,才会调用callback函数。

注册仅仅代表将来发生的时候来调用这个函数,如果不发生就一直不会调用。

我是问,在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,当收到beacon帧时,就会执行*zll_BeaconIndCB ( void *param )这个函数,对吗?

在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,当收到beacon帧时,就会执行*zll_BeaconIndCB ( void *param )这个函数,对吗?

对的!

Hi VV:

在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,当收到beacon帧时,就会执行*zll_BeaconIndCB ( void *param )这个函数。

ZDO_beaconNotifyIndCB函数不是extern void NLME_beaconNotifyInd(NLME_beaconInd_t *pBeacon);的回调函数吗?

按照回调函数的机理,应该是NLME_beaconNotifyInd函数被调用并且收到beacon帧,才会执行被ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册过的zll_BeaconIndCB 函数吗?

另外,寻遍Z-Stack工程没有发现有调用函数extern void NLME_beaconNotifyInd(NLME_beaconInd_t *pBeacon);难道它也是在库函数中被调用的吗?若如此,哪些情况会触发此函数呢?

谢谢 VV老师。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top