关于NV_RESTORE

来源:互联网 发布:微信幼儿网络教育 编辑:程序博客网 时间:2024/04/29 13:55

1、设置编译选项NV_RESTORE后,即使网络中存在路由,协调器依然能加入到原有PANID中;

2、设置NV_RESTORE后,修改函数

ZDApp_CoordStartPANIDConflictCB( uint16 panid )


  return ( panid + 1 );//原有

//return panid;     //修改测试值
}
return返回值不影响网络组建。

3、没有设置NV_RESTORE的情况下,如果原有网络中的路由存在,协调器的PANID+1后组建网络;如果修改返回值为return panid 时,会造成网络无法建立的现象


在实际项目中,需要加入NV_RESTORE编译选项,可NV_RESTORE具体在哪里定义呢?

分别用IAR和SourceInSinght找遍了所有可能的字符串也没找见NV_RESTORE的定义出,原本以为NV_RESTORE在某个地方被定义为0了,改为1就可以了,很遗憾没有找到,突然想起TI公司提供的ZSTACK并非完全提供源代码,其中一部分代码是封装起来的,我们是看不到的,也许NV_RESTORE的定义正在这段代码里,可是我们如何去定义NV_RESTORE呢?
我们可以在IAR编译器的编译选项里面定义,如下图所示:
ZSTACK 研究与应用:NV_RESTORE 的使用 - 蓝天白云 - 蓝天白云的博客
 加入后重新编译就可以实现网络信息存储了。
注意:使用该编译选项后如果想清除保存的信息,必须把FLASH彻底擦除一遍,不然事先存储的网路信息将一直保存下去,直到有新的设备加入。
以上是实验所得结论,不足或错误之处欢迎大家指正。
NV_INIT保存在nv的内容主要是网络或者节点的配置参数,在节点运行中这些参数很少变化或者几乎不会有变化。NV_INIT选项保存的所有参数可以在结构体zgItemTable中查看到。


NV_RESTORE选项保存的内容主要是节点运行过程中的状态量,借助这个特性,节点在掉电或者复位之后不需要无线电通讯就可以恢复到之前的网络连接状态。NV_RESTORE保存的内容主要有网络层数据库NIB、设备关联表、绑定表、路由表等。



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、设备关联表、绑定表、路由表等。


0 0