Z-Stack删除AssociatedDevList中的无效节点

在Z-Stack中,当ED设备频繁掉电上电,且不定义NV_RESTORE宏时,AssociatedDevList可能会占满。解决方法包括:全功能节点利用age域结合Link Status消息判断子节点状态;半功能设备则需要添加'idle'域,通过累加并响应OTA消息来清理无效条目。
摘要由CSDN通过智能技术生成

昨天发现一个问题,ED设备不定义NV_RESTORE宏,频繁掉电上电多次后,就不能入网了。

然后google了一下找到原因:ED设备反复入网,重新分配ShorAddr,AssociatedDevList就被占满了。

AssociatedDevList是一个类型为associated_devices_t的数组,容量为NWK_MAX_DEVICES。

先看associated_devices_t的定义:

typedef struct {
    UINT16 shortAddr;                 // Short address of associated device
    uint16 addrIdx;                   // Index from the address manager
    byte nodeRelation;
    byte devStatus;                   // bitmap of various status values
    byte assocCnt;
    byte age;
    linkInfo_t linkInfo;
} associated_devices_t;

由于未开启NV_RESTORE,那么掉网设备重新入网后会被重新分配ShortAddr,将占用新的设备关联表条目。

而旧的关联条目,在Z-Stack中是不会主动被删除的。


总结一下解决的办法:

一. 全功能节点

类型associated_devices_t中,有一个age域,当关联表的维护者收到一条来自该短地址的Link Status消息,就会重置该域。

全功能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值