TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2530: cc2530属性上报死机

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出來

赞(0)
未经允许不得转载:TI中文支持网 » CC2530: cc2530属性上报死机
分享到: 更多 (0)