Z-Stack删除AssociatedDevList中的无效节点
来源:互联网 发布:里杰卡尔德知乎 编辑:程序博客网 时间:2024/06/05 19:53
昨天发现一个问题,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消息,就会重置该域。
全功能节点(路由器)默认为15秒发送一次Link Status,那么父节点就可以通过age域来判断它的全功能子节点是否还连接在网络中。
- for(_nodeCounter = 0; _nodeCounter < NWK_MAX_DEVICES; _nodeCounter++) {
- if((CHILD_FFD_RX_IDLE==AssociatedDevList[_nodeCounter].nodeRelation) || (AssociatedDevList[CHILD_FFD==_nodeCounter].nodeRelation)) {
- if(AssociatedDevList[_nodeCounter].age > NWK_ROUTE_AGE_LIMIT) {
- //#TODO: Remove...
- }
- }
- }
二. 半功能设备
如果是终端设备,是不会定时发送Link Status的,那么通过age域来判断的方法就不可用了,因为无论该设备是否在网络中,age域都一直在累加。
TI E2E论坛中的大神发表了如下的方法:
编辑AssocList.h头文件,在associated_devices_t的类型定义中添加一个“idle”域,定时累加该域的值,直到收到一条来自该短地址的OTA消息,将该域的值重置。
这样就可以使用类似全功能设备的判断方法来删除无效的终端子节点了。
转自:http://blog.csdn.net/amd123linux/article/details/12191407
- Z-Stack删除AssociatedDevList中的无效节点
- Z-Stack删除AssociatedDevList中的无效节点
- 修改z-stack节点深度和数量
- z-stack中的寻址-发送模式
- Z-Stack中的HOLD_AUTO_START编译选项分析
- Z-Stack中的HOLD_AUTO_START编译分析
- [Zigbee]Z-stack Zed 失去节点之后的流程
- 删除vector中的节点
- 删除无头单链表中的节点
- 删除操作系统中的无效网卡
- xsl获取参数中的当前节点无效
- Z-Stack 绑定中的原码补码反码小插曲
- z-stack中的波特率设置在哪个文件夹下?
- 删除子父节点中的某个节点
- asp 删除 xml中的节点
- 删除树中的父节点
- 删除二叉排序树中的一个节点
- 删除单链表中的某个节点
- ubuntu 12.04下LAMP安装配置
- nodejs快捷升级方式
- 3、找出单链表的中间元素
- tapestry注释介绍Annotations
- PHP面向对象开发的学习(一)
- Z-Stack删除AssociatedDevList中的无效节点
- error : comparison of distinct pointer types lacks a cast
- 今天遇到“未能加载文件或程序集"xxx”或它的某一个依赖项。试图加载格式不正确的程序。”
- 构建Android 开发环境
- jprofile8意外关闭
- ARM CPU 简单分类
- HDU-3295-An interesting mobile game(BFS+DFS)
- php session设置说明
- find the mincost route(floyd算法)