Part Number:CC2530
你好,我想请问下cc2530芯片一直快速不停的发属性上报,开始很正常,一会芯片会报IDATA堆栈不足,而且网络链路会自动断(有时还会复位),但是devState 还是等于DEV_ROUTER,经排查,是属性上报函数zcl_SendReportCmd()里到达APSDE_DataReq( &req )这个函数就死在这里。使用的stack是1.2.2版本
Kevin Qiu1:
在设置里面将stack size 改大一些试试
,
YiKai Chen:
檢查一下你发属性上报的程序有沒有配置記憶體沒有歸還
,
卑鄙的信鸽:
你好,IDATA默认是0xc0,我修改为0xd0还是不行,如果设置为更大的值会报错,所以我感觉不是设置stack的问题,我的操作是以600ms一次上报一次属性,然后一会儿就死在APSDE_DataReq( &req )这个函数了,但是我看不到这个函数的源代码
,
卑鄙的信鸽:
你好,没有什么内存没释放的。就是很普通的调用zcl_SendReportCmd()函数
,
YiKai Chen:
相關程序要不要貼上來檢查看看
,
卑鄙的信鸽:
void GeneralAttrReport(uint16 ClusterId,uint16 AttributeID,uint16 SourceEndpoint){
uint8 i = 0; uint8 state;
zclReportCmd_t* reportCmd = osal_mem_alloc( sizeof( zclReportCmd_t ) + sizeof( zclReport_t )); zclAttrRec_t attrRec; if((ZDApp_GetState() == DEV_ROUTER) && (reportCmd != NULL)) { state = zclFindAttrRec( SourceEndpoint, ClusterId, AttributeID, &attrRec ); if(state == TRUE) { for(i = 0; i < SwitchLight_NumAttributes[SourceEndpoint – 1]; i++) { if(attrRec.clusterID == ClusterId) { if(attrRec.attr.attrId == AttributeID) { reportCmd->numAttr = 1; reportCmd->attrList[0].attrID = AttributeID; reportCmd->attrList[0].dataType = attrRec.attr.dataType; reportCmd->attrList[0].attrData = attrRec.attr.dataPtr; zcl_SendReportCmd(SourceEndpoint, &DstAddr, ClusterId, reportCmd, ZCL_FRAME_SERVER_CLIENT_DIR,0,TRUE, Num++); break; } } } } } osal_mem_free( reportCmd );
}
,
YiKai Chen:
先去掉zcl_SendReportCmd先不要report還會不會有同樣的問題
,
卑鄙的信鸽:
你好,我把zcl_SendReportCmd()函数屏蔽了,就不会出现这些问题,一切看起来很正常。不过这样我就不确定这个zcl_SendReportCmd()为什么会引导出这些问题。这个函数是官方提供的接口函数
,
YiKai Chen:
把reportCmd改成zclReportCmd_t reportCmd固定配置、相關程序改一下再試試
,
卑鄙的信鸽:
你好,我刚才试了下,这样改也一样出现这些错误,感觉可能是zclReportCmd_t这个结构体有个不定长的数组在。
,
YiKai Chen:
抓包看看送什麼report出來