关于osal_nv_write 修改PANID不成功问题
求大神帮忙看下为什么之前 可以实现在程序运行过程中修改PANID,而如今却是不行,代码如下:
typedef union
{
unsigned short word;
unsigned char byte[2];
} UNION_2_BYTE;
uint8 dd=0xff;
if(g_sys_key1Sample > 160)//有按键超过500毫秒
{
UNION_2_BYTE tmp;
tmp.byte[0]=0x88;
tmp.byte[1]=0x66;
g_sys_key1Sample = 0;
osal_nv_item_init(ZCD_NV_PANID,osal_nv_item_len( ZCD_NV_PANID ), &tmp.word); //改变PANID值
dd=osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &tmp.word); //运行到这里dd均等于0;
SystemResetSoft();
}
测试环境说明:宏定义环境(协调器)
环境一:xNV_INIT
xNV_RESTORE
另外分:单协调器环境下,和有一个终端成功组网环境下。
环境二:xNV_INIT
NV_RESTORE
另外分:单协调器环境下,和有一个终端成功组网环境下。
总结:在以上测试中用抓包软件测得的PANID都不是上面代码的,有记忆了之前的,也有随机分配其他的。
@Jack,
1) xNV_INIT
xNV_RESTORE
不管协调器有没有加过终端设备,每次协调器重启都会换一个新的PANID
2)xNV_INIT
NV_RESTORE
如果协调器上电以后,有终端设备加网成功过,那么下次协调器再上电,PANID不会变
如果协调器上电以后,没有终端设备加网过,那么下次协调器再上电,PANID会变