ZLL 、Home 120 SampleSwitch Coordinator CC2530DB 失控 是什么问题?
osal_start_timerEx( zclSampleSw_TaskID, SAMPLESW_ENREQ_TIMEOUT_EVT , 1000 ); 设置断点
Mon Jan 04, 2016 15:54:31: Breakpoint hit: Code @ zcl_samplesw.c:1007.22
Mon Jan 04, 2016 15:54:45: Breakpoint hit: Code @ zcl_samplesw.c:1007.22
ZDP_SimpleDescReq( &simpleDec_DstAddr, simpleDec_DstAddr.addr.shortAddr,simpleDec_EndPoint, 0); 设置断点
Mon Jan 04, 2016 15:54:48: Breakpoint hit: Code @ zcl_samplesw.c:1023.30
if (!((pSimpleDesc.simpleDesc.AppProfId == 0xC05E) &&
(pSimpleDesc.simpleDesc.AppNumInClusters == 1)
&& (pSimpleDesc.simpleDesc.AppNumOutClusters == 1))
&& ((pSimpleDesc.simpleDesc.AppNumInClusters > 0) ||
(pSimpleDesc.simpleDesc.AppNumOutClusters > 0))) 此条件不成立!
pSimpleDesc.simpleDesc.AppProfId = 260;
pSimpleDesc.simpleDesc.AppNumInClusters = ‘\0’ (0x00)
pSimpleDesc.simpleDesc.AppNumOutClusters = ‘\0’ (0x00)
osal_mem_free(pSimpleDesc.simpleDesc.pAppInClusterList); //执行此函数里时,程序失控
Mon Jan 04, 2016 15:54:59: Unable to execute: driver busy.
抓包数据在附件
你好,请问你的问题是什么?程序失控?
当遇到一个小问题的时候心情也郁闷,当解决掉这个小问题的时候心情也会舒畅。
ZDP_ActiveEPReq()函数是求得远端设备的所有端点,ZDP_SimpleDescReq()函数是求一个端点的描述,在 TI vv 老师提供的方案中在(pMsg->clusterID == Simple_Desc_rsp)事件中对求得的端点注册,这个过程中ZDO_ParseSimpleDescRsp( )函数对端点描述符解析,解析的时候如果簇项目存在则对簇列表申请内存空间,如果解析成功则对本应用端点描述注册,完了执行 osal_mem_free()函数释放申请的内存空间,问题就出在释放空间这里。
调试协议栈是 Home 120, 就相关代码与 Home 122对比没有明显差异。当然如果对协议栈了解透彻这不算是个问题。
对osal_mem_free()这个函数的解释的时候有这么一句话“必须是在osal_mem_alloc()函数申请过空间的时候才能用此函数”,ZDO_ParseSimpleDescRsp( )函数解析的时候对端点描述中的簇项目做了一次判断,如果簇存在才申请内存空间,然而在此释放空间的时候没有作此判断所出现的问题。当加上一句对pSimpleDesc.simpleDesc.AppNumInClusters 代码的判断,此问题也不存在了。