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

AssociatedDevList表满后删除问题!

芯片: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,有的不能,那几个库函数直接就仿真进汇编了,不清楚为什么清除不了,求解答?或者告诉从那查起?

VV:

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

da che:

回复 VV:

感谢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了,也不清楚原因。

赞(0)
未经允许不得转载:TI中文支持网 » AssociatedDevList表满后删除问题!
分享到: 更多 (0)