协调器的热备份
需求:假定一个zigbee系统,由于稳定性的要求。当出现主协调器故障时,备用协调器马上能替代主协调工作,而不影响系统的控制。即冗余要求。
问题:ZIGBEE上要如何实现。
你把原先协调器NV里面的数据读出来写到新的Coordinator里面就可以了
请教VV:
1、是否将zgItemTable中涉及的ID从NV读出来再写入新的协调器就可做备份协调器了?
2、直接由协调器添加入网的最大路由器数目是由什么量决定的?协调器中记录的设备信息会越来越多,有一些已经离开网络或者坏掉的设备依然会占用空间。如果网络中有某个设备坏掉了,想将协调器中对其记录的信息删除,以便将空间留给新加入的设备,应该怎么做?具体该擦除哪些空间呢?调用什么函数?
图1是协调器刚上电,还没有设备加入网络
图2是IEEE地址为00 12 4B 00 01 4F C3 00的路由器加入网络
图3是IEEE地址为00 12 4B 00 01 4F C0 8D的路由器加入网络,如方框标注
由此可以看出入网的设备信息是在XDATA地址为0x105E的位置开始记录,一直到0x117B的存储空间都是空的,
不知道是否这一部分区域都是用来存储入网信息的?NV各个地址都存了哪些信息?有相关资料推荐吗?
图3
图2
哪位高手给解答一下啊
对于子设备的最大数是有
// Maximum number in tables
#if !defined( NWK_MAX_DEVICE_LIST )
#define NWK_MAX_DEVICE_LIST 20 // Maximum number of devices in the
// Assoc/Device list.
#endif
节点的信息在
AssociatedDevList[x]中
如果是Z-Stack Home 1.2.0以后的协议栈的话,对end device有child aging功能,当End device长时间没有发送data request以后,父设备会去做删除操作。
如果设备直接从协调器入网,协调器也会有NWK_MAX_DEVICE_LIST的数量限制吗?
协调器设置了NV_RESTORE,设备掉电之后这些信息应该仍然在NV中存储吧,该怎么从协调器中删除 那些故障的设备信息?
协调器也会有限制的
不要直接去操作NV里面的东西,会有相关的函数删除子设备信息,在函数里面自动会去NV删除东西的。
/*
* Remove a device from the list. Uses the extended address.
*/
extern byte AssocRemove( byte *extAddr );
关于你提出拷贝原先的协调NV内容。
目的: 当前主要的是想复制终端的设备信息,让备用协调器的AssociatedDevList中能和原先协调器的一样。(绑定表之类的暂时不考虑)
测试方式:对比了ZComDef.h文件的条目,利用osal_nv_read从主协调器拷贝出ZCD_NV_ADDRMGR与ZCD_NV_DEVICE_LIST信息,再用osal_nv_write写入备用协调器。但是测试发现备用协调器AssociatedDevLis还是空的。
问1:我测试的方式是否正确?
问2:具体需要拷贝哪些NV内容才能实现备份?
问3:是osal_nv_read函数还是用HalFlashRead去实现拷贝复制?