嗨、
我将在 FH 模式下使用收集器和传感器的 SimpleLink SDK 示例。
https://dev.ti.com/tirex/explore/node?a=BSEc4rl__6.40.00.13&devtools=LAUNCHXL-CC1352R1&node=A__ADh8veUDmQ809L8z0l6GtQ__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__6.40.00.13&r=BSEc4rl__7.10.00.98
关于这 篇文章 、其中引用了"如果功率损耗对于传感器而言太短、从而注意到收集器已离线、则不会进入孤立状态。 由于它仍然知道网络、因此它将能够向收集器发送消息。"
问题是、当我在超过1分钟的时间内断开收集器时、在由10个传感器组成的网络中、始终有一个或两个传感器不会进入孤立状态、因此 会发生同步损失、并且每次启动都会增加。 我可以看出这一点、因为我强制它们在成为孤立对象时进行重置、然后它们进入"搜索网络阶段"。 可在进入孤立状态时修复问题。
我的问题是、传感器是否有可能进入未定义状态?
在 静态 void pollCnfCb (ApiMac_mlmePollCnf_t *pData)函数中的 jdlc.c 中,如果没有从收集器接收到 ack ,并且如果(devInfoBlock.dataFailures == config_MAX_DATA_failures)是 true,则存在另一个 if 语句:
如果(CONFIG_MAC_BEART_ORDER = JDLLC_BEARGE_ORDER_NON_BEAKER)
如果在任何给定时刻为假、这是否有任何变化? 我的 CONFIG_MAC_BEACON_ORDER_ORDER 为15 (默认值)。
else if(pData->status == ApiMac_status_noAck)
{
/* track the number of failures */
devInfoBlock.dataFailures++;
if((devInfoBlock.currentJdllcState == Jdllc_states_joined)
|| (devInfoBlock.currentJdllcState == Jdllc_states_rejoined))
{
if(!CONFIG_FH_ENABLE)
{
/* retry poll with shorter interval in busy network */
Ssf_setPollClock(JDLLC_RETRY_POLL);
}
}
if(devInfoBlock.dataFailures == CONFIG_MAX_DATA_FAILURES)
{
if(CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON)
{
handleMaxDataFail();
}
}
else
{
if(devInfoBlock.currentJdllcState == Jdllc_states_initRestoring)
{
if((!CONFIG_RX_ON_IDLE) && (!CONFIG_FH_ENABLE))
{
/* set event for polling if sleepy device*/
Util_setEvent(&Jdllc_events, JDLLC_POLL_EVT);
}
}
}
}