协议栈:TI的z-stack 版本:2.5.1a 看到很多帖子都说需要编译NV_INIT以及NV_RESTORE。 NV_RESTORE之后可以将网络信息存放在NV中这个我知道。 1.NV_INIT我看其他的帖子的说法都是保存网络或节点的配置参数,但是我全局搜索了NV_INIT之后只发现在zgItemTable数组中有使用。并且也只是全局变量写入NV的这个操作,不太懂其中有什么作用(是为了给一些网络的参数配置一个初始值,然后让用户在网络建立之后可以动态修改这些全局变量。并且在设备重新启动之后这个全局变量变成修改之后的值运行吗?) 2.不编译NV_INIT会有什么样的影响?
1.是在那个zgItemTable中使用到(开源部分),这部分的NV主要是网络设备的一些参数的配置及初始化,你打开那个数组也能看到相关的参数及信息。 是可以根据api去修改这里面的参数,重启或直接生效
2.不编译的话,倘若你重启了,这里面init对应的数据可能会混乱,导致你系统崩溃.(没必要纠结一个宏的定义,预编译这2个选项对于处理zigbee的网络是很重要的)
详细可以浏览下面网站
感谢你的回答
我也不太想纠结这个问题,但是之前出现过编译了nv_restore但是最后运行了一段时间发现设备的短地址发生改变的情况。虽然已经想到办法在应用层解决了这个问题。但是还是担心会出现其他的一些不可预计的问题,所以就病急乱投医的想看看会不会是nv_init造成的。
另外,为什么不编译会出现nv_init中的那些数据混乱呢? 在我看来如果不编译的话顶多也应该是每次启动之后的数值都会变成设置的全局变量才对吧
主要是NV的内容不应该出现过多的变化,如果这些变化是人为控制的可能没有什么问题,如果是意外发生变化就会导致整个系统崩溃.所以尽可能的将这些本身变化就不大的数据存至nv中.
你们说的系统崩溃我能想到的是不小心修改了NV_INIT中保存的信息的全局变量的数值。但是这种情况下不管有没有编译NV_INIT都会造成系统的崩溃。唯一的区别就只有设备重启之后没有编译的情况会是初始值,编译了的情况下会是上次修改之后值....... 公司的产品我全都没有编译NV_INIT,运行几个月之后出现了短地址改变了的情况(虽然我感觉这个问题和NV_INIT没有什么关系)。现在很担心没编译NV_INIT会出现其他的问题,所以请原谅的我这么纠结....
嗯,就如@Tenang 所回复的,NV_INIT保存在nv的内容主要是网络或者节点的配置参数.因此,为了整个系统的稳定性最好加上这个预编译宏
啥都不管,两个都开着就行了。 很少有设备需要断电重新入网的,
对于ti协议栈建议用ha1.2以上的协议栈,Zstack2.5.1是老一代版本,会有很多网络问题,这些在TI论坛社区可以经常关注到