<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > RTC時間的安全讀取

          RTC時間的安全讀取

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          方法1:
          (缺點): for(;RTCCTL01&RTCRDY;) _NOP() ; // 等待RTC有效
          這一步最長可能需要等上一秒鐘,對實時操作十分不利。
          單要這一步: for(;!(RTCCTL01&RTCRDY);) _NOP() ; 雖然可以避免 RTCRDY復位的時候去讀取,但是不能避免讀取的還未完成,就遇到RTCRDY 復位的可能。
          //
          // //
          // 讀取RTC時鐘 方法1 //
          // //
          //
          unsigned long GetTime(void)
          {
          int hour,minute,second ;
          unsigned long time ;
          for(;RTCCTL01&RTCRDY;) _NOP() ; // 等待RTC有效
          for(;!(RTCCTL01&RTCRDY);) _NOP() ;
          hour = GetRTCHOUR() ;
          minute = GetRTCMIN() ;
          second = GetRTCSEC() ;
          time = (unsigned long)hour*1000000
          +(unsigned long)minute*1000
          +(unsigned long)second ;
          return time ;
          }
          方法2:
          讀取時鐘 方法2 缺點:
          (數(shù)據(jù)體結(jié)構(gòu)pTime->wYear )
          讀取RTC寄存器或者相關(guān)RTC芯片的絕妙方法
          do
          {
          seconds = FROM_BCD(pRTCReg->BCDSEC & 0x7f);
          pTime->wYear = FROM_BCD((pRTCReg->BCDYEAR & 0xff)) + RTC_YEAR_DATUM;
          pTime->wMonth = FROM_BCD(pRTCReg->BCDMON & 0x1f);
          pTime->wDay = FROM_BCD(pRTCReg->BCDDATE & 0x3f);
          pTime->wDayOfWeek = pRTCReg->BCDDAY - 1;
          pTime->wHour = FROM_BCD(pRTCReg->BCDHOUR & 0x3f);
          pTime->wMinute = FROM_BCD(pRTCReg->BCDMIN & 0x7f);
          pTime->wSecond = FROM_BCD(pRTCReg->BCDSEC & 0x7f);
          pTime->wMilliseconds= 0;
          } while (pTime->wSecond != seconds);
          這樣即可防止在讀的過程中出現(xiàn)跨分、時、日、月、年等跳變時取得的數(shù)據(jù)不同步。
          在計數(shù)器變化的時候去讀取,該讀取被判為無效,自動忽略。向寄存器寫入范圍外的數(shù)據(jù)和時間會導致不可預見的結(jié)果。


          關(guān)鍵詞: RTC時間安全讀

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();