1、NV_RESTORE宏的作用
-
问:coo和终端都已经组网成功
1、这时将coo断电,重新上电,组网后终端的短地址是否不变?
2、这时终端断电,重新上电,组网后终端的短地址是否不变?
3、这时COO和终端都断电,重新上电,组网后终端的短地址是否不变?
-
答:分两种情况来看 开启NV_RESTORE和不开启NV_RESTORE
1) 开启NV_RESTORE
1, 不变
2,不变
3,不变
2)不开启NV_RESTORE
1, 变化
2,不变
3,变化
2、加入NV_RESTORE编译选项
这个选项可以帮助终端在重启后也还会连上一次连接的协调器,获取到的短地址仍然不变化。开启的方法也很简单
在宏定义中定义NC_RESTORE=1即可
3、清除NV_RESTORE保存的信息
加入这个宏定义好处肯定是有的,但是问题也来了,如果终端想加入别的协调器网络,既是PANID和频道都一样,
不管重启多少次都不会加入新的协调器中,那该怎么办呢?
其实TI考虑到这个问题了,下面是官方的说明
application wants to delete the stored NV information It just needs to set the ZCD_NV_STARTUP_OPTION as explained below and do a reset.
“If the application would like to force a “new” join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. “New” join means to not restore the network state of the device. Use zgWriteStartupOptions() to set these options
[zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);]
zGlobals.c中有这两个函数,第二个就是上面所用的函数
uint8 zgReadStartupOptions( void ) //启动时读取ZCD_NV_STARTUP_OPTION的值
uint8 zgWriteStartupOptions( uint8 action, uint8 bitOptions ) //修改ZCD_NV_STARTUP_OPTION的值
总结:
本文仅抛砖引玉,希望大牛们提出更多的见解和方法,共享技术,共同进步!
NV_INIT保存在nv的内容主要是网络或者节点的配置参数,在节点运行中这些参数很少变化或者几乎不会有变化。NV_INIT选项保存的所有参数可以在结构体zgItemTable中查看到。 NV_RESTORE选项保存的内容主要是节点运行过程中的状态量,借助这个特性,节点在掉电或者复位之后不需要无线电通讯就可以恢复到之前的网络连接状态。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。