网络中有协调器(开启NV),路由,以及终端。
首先路由和终端都直连在协调器下,通讯没问题
然后把协调器断电,这时终端就会连到路由下
再把协调器上电,这时协调器给终端发送数据就失败了,协调器保留了终端的信息, 以为那个终端设备是自己的子设备, 等待终端设备向自己发送Data Request
所以这个情况要真么解决?
Viki Shi:
可以手动删除无效节点,见AssocList.h,代码如下:
AddrMgrEntry_t addrEntry;
NLME_LeaveReq_t req;
uint8 i = Z_EXTADDR_LEN + 1;// Set up device info
addrEntry.user = ADDRMGR_USER_DEFAULT;
addrEntry.index = index;
if (AddrMgrEntryGet( &addrEntry ))
{
for (i = 0; i < Z_EXTADDR_LEN; i++ )
{
if ( addrEntry.extAddr != 0 ){ break;}
}
}
if(i < Z_EXTADDR_LEN){
// Remove device
req.extAddr = addrEntry.extAddr;
req.removeChildren = TRUE;
req.rejoin = TRUE;
req.silent = FALSE;
NLME_LeaveReq( &req );
}else{
AssocRemove(addrEntry.extAddr);
ZDApp_NVUpdate();
}或者可以参考下网友分享的方法:blog.csdn.net/…/12191407
Brightness L:
回复 Viki Shi:
感谢回复,如果不手动去删除,上面那种情况还有什么解决办法吗?就是协调器不会自动更新关联表的吗?
Viki Shi:
回复 Brightness L:
看我后面发的网友链接,可以代码实现