加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

针对多次同步失败的节能处理机制

发布时间:2020-12-14 05:13:17 所属栏目:大数据 来源:网络整理
导读:? 程序不美, 不来一一整理了。 以后有时间可以把这个功能封装为一个类的对象来操作。即使不封装为类,至少也该封装为一个独立的函数吧。 。。 关键代码摘要如下: ? if( GetSecFlag(bit0) ) // 秒标志 { ClrSecFlag(bit0); sG_Global.wakeup_agagin++; //

?

程序不美, 不来一一整理了。 以后有时间可以把这个功能封装为一个类的对象来操作。即使不封装为类,至少也该封装为一个独立的函数吧。。。

关键代码摘要如下:

?

if( GetSecFlag(bit0) ) // 秒标志
{

  ClrSecFlag(bit0);

  sG_Global.wakeup_agagin++;

// 同步事件,记为事件A :同步超时,唤醒一次
if( sG_Global.syncState==ST_SYNC_OK )
{
  sG_Global.SyncFail_Times = 0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  if( ++sG_Global.syncRunCnt> REVISE_TIME ) ? // 每次同步后计时, 进入这里是超时了
  {

  sG_Global.syncState = ST_SYNC_NULL;? // 切换为 未同步状态
  WirelessWakeUp(62);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 同时,打开设备,进行一次同步


  sG_Global.wakeup_agagin = 0;? ? ?
  sG_Global.syncRunCnt = 0;

  }

}

  // 如果上述事件A发生:无线模块唤醒后, 又没收到同步信号,也即是说 同步失败了。 那么进入下面的处理:
  // sG_Global.wakeup_agagin每次同步后会清0, 用于记录已经多久没同步了。

if( sG_Global.SyncFail_Times <= 3) // 失败3次以内
{
  // 防止REVISE_TIME后未收到时间信号后崩溃。 所以再次打开接收。
  if(sG_Global.wakeup_agagin>= ( REVISE_TIME+120 ) )? // 这里应该是REVISE_TIME + 13 + 120 ?
  {
  sG_Global.SyncFail_Times++;
  sG_Global.wakeup_agagin = 0;
  WirelessWakeUp(62); // 每次唤醒如果同步,将清0 sG_Global.SyncFail_Times
  }
}
else // sG_Global.SyncFail_Times<=3,即大约7*3 = 21分钟以后, 就每小时才同步一次。
{
  if(sG_Global.wakeup_agagin>= 3600 )
  {
  sG_Global.SyncFail_Times++;

  sG_Global.wakeup_agagin = 0;
  WirelessWakeUp(62);

  if(sG_Global.SyncFail_Times>100) // 100次 .中的后97次是1小时一次。所以一个周期:100次同步失败的总时间是97小时+大概21分钟左右了。
  sG_Global.SyncFail_Times = 0; // 再回到下一个周期: 前3次同步失败, 失败后的420秒即每七分钟再同步一次。
  }
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读