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

变量的值被修改

昨天遇到zcl_SendRead发送后,抓包看到的目的地址不对的问题,经过调试,发现是目的地址变量的值被修改了,详细如下:

tmpDstAddr.addrMode = (afAddrMode_t)Addr16Bit;
tmpDstAddr.endPoint = 0x01;
tmpDstAddr.addr.shortAddr = 0xC859;     (1)

BasicAttrsList.numAttr = 1;
BasicAttrsList.attrID[0] = ATTRID_BASIC_MANUFACTURER_NAME;  (2)

status = zcl_SendRead( SAMPLESW_ENDPOINT, &tmpDstAddr,
ZCL_CLUSTER_ID_GEN_BASIC, &BasicAttrsList,
ZCL_FRAME_CLIENT_SERVER_DIR, FALSE, bdb_getZCLFrameCounter() );

通过调试发现,代码执行完(1)后,shortAddr的值被正确设定了;当执行完(2)后,shortAddr被修改成了attrID[0](ATTRID_BASIC_MANUFACTURER_NAME)的值。

若是改变代码,交换行1-3和行4-5的顺序(即先设定BasicAttrsList,再设定tmpDstAddr),shortAddr没有问题了,但会出现attrID[0]被修改成shortAddr(0xC859)的值的情况。

也就是说,从结果来看,tmpDstAddr.addr.shortAddr 和BasicAttrsList.attrID[0]互相影响,先执行的会被修改成后执行的值。

tmpDstAddr和BasicAttrsList都是局部变量,都在同一个函数内。

为什么会有这样的问题啊?如何解决?大家帮帮忙~

YiKai Chen:

試試用下面的程序

zclReadCmd_t * readCmd;

readCmd = osal_mem_alloc(sizeof(zclReadCmd_t) + sizeof(uint16));
if(readCmd)
{
readCmd->numAttr = 1;
readCmd->attrID[0] = ATTRID_BASIC_MANUFACTURER_NAME;

status = zcl_SendRead( SAMPLESW_ENDPOINT, &tmpDstAddr, ZCL_CLUSTER_ID_GEN_BASIC, &BasicAttrsList,ZCL_FRAME_CLIENT_SERVER_DIR,FALSE, bdb_getZCLFrameCounter() );

osal_mem_free(readCmd);
}

gaoyang9992006:

不太懂这个问题,找到个类似的。
e2echina.ti.com/…/113106
看看这个人遇到的问题以及解决方法是否对你这个有帮助。

zhaoqqq:

谢谢两位的回复。
attrID[] 的内存空间我之前已经确保,所以不是内存越界的问题。
继续调查。。。

YiKai Chen:

回复 zhaoqqq:

你有試試用我給的程序嗎?

赞(0)
未经允许不得转载:TI中文支持网 » 变量的值被修改
分享到: 更多 (0)