终端在协调器断电情况下,反复找回网络多次重启,可能重新寻找网络而不是恢复原来的网络
终端在协调器断电情况下,反复找回网络多次重启,可能重新寻找网络而不是恢复原来的网络,
正常应该不断的rejoin,但有个别时候个别终端就自动变成了join了,去新发现一个网络的状态了。
搜索协议栈devStartMode = MODE_JOIN;只有4处。
是否是这4处中某处吧终端的rejoin改成了join呢?能帮我分析这4处吗?
1.设备初始化时候读取nv,确定设备类型的时候。难道读取nv失败,启动项的nv坏掉了吗
// If AIB_apsUseExtendedPANID is set to a non-zero value by commissioning
// The device shall do rejoin the network. Otherwise, do normal join
if ( nwk_ExtPANIDValid( AIB_apsUseExtendedPANID ) == false )
{
devStartMode = MODE_JOIN; // Assume joining
}
2.路由恢复网络时
if ( (devStartMode == MODE_RESUME) && (++retryCnt >= MAX_RESUME_RETRY) )
{
if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
devStartMode = MODE_JOIN;
else
3.终端恢复网络时。_NIB.nwkPanId什么情况下会自动变成无效吗?
if ( devStartMode == MODE_RESUME )
{
if ( ++retryCnt <= MAX_RESUME_RETRY )
{
if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
devStartMode = MODE_JOIN;
else
4.紧接着3的代码,AIB_apsUseInsecureJoin 代表什么意思?
// Do a normal join to the network after certain times of rejoin retries
else if( AIB_apsUseInsecureJoin == true )
{
devStartMode = MODE_JOIN;
}
出现第四种可能性比较大
4.紧接着3的代码,AIB_apsUseInsecureJoin 代表什么意思?
// Do a normal join to the network after certain times of rejoin retries
else if( AIB_apsUseInsecureJoin == true )
{
devStartMode = MODE_JOIN;
}
AIB_apsUseInsecureJoin 就是是否允许重新开始join,因为join刚开始是mac 层的Association,没有加密的。
AIB_apsUseInsecureJoin 什么情况等于true呢?此处是重连,为什么要变成join呢?是出于什么目的考虑呢?
从使用的角度考虑,加入过网络的设备是不希望它自己重新组网的,除非手动操作