微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > AssociatedDevList表满后删除问题!

AssociatedDevList表满后删除问题!

时间:10-02 整理:3721RD 点击:

芯片:cc2530

协议栈:ZStack-CC2530-2.5.1

现象:仿真器带coordinator,添加新router至coordinator的AssociatedDevList表满了,所有router断电,coordinator调用以下函数删表:

if ( AssociatedDevList[i].age > IN_CHILD_NODE_DEL_TIME ) //连续10分钟没有该节点消息,删除
{
          addrEntry.index = i;

         if ( AddrMgrEntryGet( &addrEntry ) )
         {
                 req.extAddr = addrEntry.extAddr;
                 //osal_memcpy(req.extAddr, addrEntry.extAddr, 8);
                 req.removeChildren = TRUE; //-true 子设备也脱离,false只脱离当前设备
                 req.rejoin = TRUE; //允许设备重新加入网络,false 不允许设备重新加入网络
                 req.silent = FALSE;

                  NLME_LeaveReq( &req );

                  AssocRemove(addrEntry.extAddr);
                  ZDApp_NVUpdate();

            }
}

发现有的AssociatedDevList表内的数据能清成0xff,有的不能,那几个库函数直接就仿真进汇编了,不清楚为什么清除不了,求解答?或者告诉从那查起?

AssocGetWithExt里面能查到对应的短地址么

感谢W的回复

再次仿真发现,AssociatedDevList的序号和AddrMgrEntryGet()函数赋值的序号不一致,不知道为什么?

试验如下:

for (i = 0; i < NWK_MAX_DEVICES; i++)      //从0开始删除
{

         addrEntry.index = i;//此处把0序号给变量

        if ( AddrMgrEntryGet( &addrEntry ) )//此处查询到shortaddr,发现和AssociatedDevList[0]的shortaddr不一致,但是和AssociatedDevList[1]的shortaddr一致

        {

                   //上面问题给出的删除操作  //顺利删除了AssociatedDevList[1](**但是现在i=0,我想删除AssociatedDevList[0]**)

         }

}

然后又操作一次当i=1时读出的shortaddr是AssociatedDevList[3],造成最终我的AssociatedDevList删除不完全,不知错在哪?两个表的序号不应该一致么?

另想采用回复的AssocGetWithExt查询shortaddr,但是在删除不掉的表中获取扩展地址时AddrMgrEntryGet返回为0,不返回扩展地址,即没有扩展地址也不能执行查询shortaddr了,也不清楚原因。

谢谢W的提醒,我已找到问题,解决了故障。

具体描述如下:未知原因DevList表和AddrMgr管理的表中的对应关系不以序号为对应关系,所以强制index时查不出正确的扩展地址,修改查询方式为shortaddr后,问题解决。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top