Other Parts Discussed in Thread: CC2530, Z-STACK
环境:
一个终端设备,一个协调器设备,协调器开放网络后,终端设备通过按键请求加网,但是加网网络后,后离开了网络,如果换成路由设备就可以加入网络。
日志文件如下:
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在代码调试的时候发现,如果将协调器功能的初始化函数中注册了接收和处理ZDO层消息
//注册接收ZDO层消息 ZDO_RegisterForZDOMsg(zclGenericApp_TaskID,Device_annce); //设备宣称 //ZDO_RegisterForZDOMsg(zclGenericApp_TaskID,Simple_Desc_rsp); //设备节点描述 //ZDO_RegisterForZDOMsg(zclGenericApp_TaskID,Active_EP_rsp); //端点描述 ZDO_RegisterForZDOMsg(zclGenericApp_TaskID, Match_Desc_rsp); //ZDO_RegisterForZDOMsg(zclGenericApp_TaskID, Node_Desc_req);
在ZDO消息处理函数中
static void zclGenericApp_ProcessZDOMsgs(zdoIncomingMsg_t *pMsg )
{
static zAddrType_t dstAddrs;
switch (pMsg->clusterID)
{
case Match_Desc_rsp:
{
afAddrType_t afDstAddr;
ZDO_MatchDescRsp_t *pMatchDescRsp;
pMatchDescRsp = ZDO_ParseEPListRsp( pMsg );
afDstAddr.addrMode = afAddr16Bit;
afDstAddr.addr.shortAddr = dstAddrs.addr.shortAddr;
afDstAddr.endPoint = pMatchDescRsp->epList[0];
afDstAddr.panId = 0xFFFF;
#ifdef ZCL_ZONE
zclGenericApp_WriteIAS_CIE_Address(&afDstAddr);
#endif
}
break;
//设备宣称
case Device_annce:
{
cId_t IASZoneCluster = ZCL_CLUSTER_ID_SS_IAS_ZONE;
ZDO_DeviceAnnce_t devAnnce;
//解析Device_annce消息
ZDO_ParseDeviceAnnce( pMsg, &devAnnce );
dstAddrs.addrMode =(afAddrMode_t)Addr16Bit;
dstAddrs.addr.shortAddr = devAnnce.nwkAddr;
ZDP_MatchDescReq( &dstAddrs, devAnnce.nwkAddr, ZCL_HA_PROFILE_ID,
1, &IASZoneCluster, 1, &IASZoneCluster, FALSE );
}
break;
//获取端点反馈
case Active_EP_rsp:
{
//no things
}
break;
//获取端点描述
case Simple_Desc_rsp:
{
//不需要解析
}
break;
case Node_Desc_req:
{
}
break;
default:break;
}
}
此时终端无法入网,出现上面的情况。
如果取消注册接收ZDO层消息,则大部分入网是正常的。
如果你说注册这个会导致应该不太可能,因为我之前测试过各种类似的回调。
而且看你抓包里面没有出现的你注册的各种回调的req的包。
下面是我曾经注册的类似过程没有出现,你有换过设备,还是说所有设备。
在终端设备请求入网后,发现终端一直在请求秘钥,然后我用Z-tool工具开放网络,发现MEM_ALLOC_ERROR错误,这个是有内存泄露吗?
<TX>05:27:12.15 COM10 ZDO_MGMT_PERMIT_JOIN_REQUEST (0x2536)
AddrMode: 0x00 (ADDRESS_NOT_PRESENT) (0x0)
DstAddr: 0xFFFC
Duration: 0x3C
TCSignificance: 0x00
<RX>05:27:12.19 COM10 ZDO_MGMT_PERMIT_JOIN_REQ_SRSP (0x6536)
Status: MEM_ALLOC_ERROR (0x10)
抓包日志如下: