![RaspberryPi樹莓派NTP高精度對時(shí)服務(wù)解決方案_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/5/dfc25f0a-a281-43d0-ade3-4363f1103c99/dfc25f0a-a281-43d0-ade3-4363f1103c991.gif)
![RaspberryPi樹莓派NTP高精度對時(shí)服務(wù)解決方案_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/5/dfc25f0a-a281-43d0-ade3-4363f1103c99/dfc25f0a-a281-43d0-ade3-4363f1103c992.gif)
![RaspberryPi樹莓派NTP高精度對時(shí)服務(wù)解決方案_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/5/dfc25f0a-a281-43d0-ade3-4363f1103c99/dfc25f0a-a281-43d0-ade3-4363f1103c993.gif)
![RaspberryPi樹莓派NTP高精度對時(shí)服務(wù)解決方案_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/5/dfc25f0a-a281-43d0-ade3-4363f1103c99/dfc25f0a-a281-43d0-ade3-4363f1103c994.gif)
![RaspberryPi樹莓派NTP高精度對時(shí)服務(wù)解決方案_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/5/dfc25f0a-a281-43d0-ade3-4363f1103c99/dfc25f0a-a281-43d0-ade3-4363f1103c995.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目錄1RaspberryPi樹莓派系統(tǒng)NTP對時(shí)服務(wù)解決方案21.1解決方案概述21.2對時(shí)服務(wù)程序31.2.1main.cpp31.2.2config_file.h91.2.3config_file.cpp9RaspberryPi樹莓派系統(tǒng)NTP對時(shí)服務(wù)解決方案解決方案概述RaspberryPi樹莓派系統(tǒng)在實(shí)際的應(yīng)用過程中,特別是作為產(chǎn)品級應(yīng)用中,有對系統(tǒng)時(shí)間的精準(zhǔn)度有高指標(biāo)要求的應(yīng)用場景,比如要求時(shí)間服務(wù)精度達(dá)到0.1秒內(nèi)或者更高要求。樹莓派設(shè)備本身沒有硬件時(shí)鐘, 因此每次設(shè)備通電開啟后都需要重新授時(shí)來獲得準(zhǔn)確的系統(tǒng)時(shí)間,樹莓派系統(tǒng)的時(shí)間主要是通過NTP協(xié)議同步網(wǎng)絡(luò)時(shí)間來實(shí)現(xiàn)的。本方案提供
2、一套完整的高精度系統(tǒng)時(shí)間服務(wù)解決方案,思路如下:1、使用ntpdate取締默認(rèn)的ntp實(shí)現(xiàn)NTP對時(shí)服務(wù)功能;2、開發(fā)基于C語方的對時(shí)程序,實(shí)現(xiàn)NTP對時(shí)服務(wù)以及狀態(tài)信息(最重要的是誤差時(shí)間信息)產(chǎn)出,并提供專用調(diào)用接口服務(wù),程序代碼請參考下面章節(jié)。3、配置crontab定時(shí)任務(wù)定期執(zhí)行對時(shí)腳本,實(shí)現(xiàn)定期系統(tǒng)對時(shí),為什么要定時(shí)對時(shí)呢?因?yàn)闃漭稍O(shè)備本身的守時(shí)精度不是特別高的,因此需要定期執(zhí)行時(shí)間同步操作來校正系統(tǒng)時(shí)間。4、實(shí)際應(yīng)用程序在需要獲取精準(zhǔn)時(shí)間服務(wù)時(shí),綜合系統(tǒng)最新時(shí)間信息以及誤差時(shí)間信息進(jìn)行校正處理,得到精準(zhǔn)時(shí)間,如下圖所示。rooLPtaidedev;cat/hojne/usb/lL
3、g/Scatus/ntp,log2020-0t-0517:32:10.9645735Jun17:52:10nLpdrite21265:Jdjimr.rim白120.IOS.110心口電白,安白u(yù)n.ntp.utq-cnrd:息id在dew:-在上圖中為ntpdate執(zhí)行對時(shí)服務(wù)后的狀態(tài)信息,其中最重要的是offset狀態(tài)數(shù)據(jù),它代表的是與上次對時(shí)間的偏移量,也就是誤差值,經(jīng)過實(shí)際經(jīng)驗(yàn)總結(jié),如果對時(shí)后出現(xiàn)offset數(shù)值過大,需要進(jìn)行重復(fù)多次執(zhí)行同步,直到誤差足句小(本人設(shè)定offset要小于0.01),要得到精準(zhǔn)的時(shí)間,這個(gè)offset值起到關(guān)鍵作用,經(jīng)大量實(shí)驗(yàn)證明, 精準(zhǔn)時(shí)間=當(dāng)前系統(tǒng)時(shí)間+
4、offset,當(dāng)然前提是offset誤差值一定要足夠小才可以這樣處理。以下附上使用ntpdate實(shí)現(xiàn)NTP對時(shí)服務(wù)功能代碼:對時(shí)服務(wù)程序main.cpp#include#include#include#include#include#includeconfig_file.h#include#includeusingnamespacestd;intgetLogPath(char*retbuf,intlen,intserver)charconfigFile口=/home/pi/params/pi.ini;chardefPath口=/home/usb/log/ntp.log;memset(retbu
5、f,0,len);chartmp256;/resultintres=GetConfigStringValue(configFile,PI_PAR,LOGSTATUS_DIR,tmp);if(res)/novalue,setasdefaultstrcpy(retbuf,defPath);couterror0&strResultiSize-1=n)strResult=strResult.substr(0,iSize-1);)returnstrResult;)unsignedparseArg(intargc,char*argv)unsignedret=0;intch=0;while(ch=g
6、etopt(argc,argv,bd)!=-1)switch(ch)caseb:backupntpserverret|=0 x01;break;cased:debugret|=0 x02;default:break;)returnret;)/linuxintmain(intargc,char*argv)(unsignedmode=parseArg(argc,argv);/coutmode1)&0 x1;if(bDebug)(printf(Enterdebugmode!n);printf(Version19.07.14.n);)chartmp1024;charconfigFile口=/h
7、ome/pi/params/service.ini;intserverNo=mode&1;charlogfile1024;intlen=getLogPath(logfile,sizeof(logfile),serverNo);stringfilepath(logfile);coutfilepathendl;intres=GetConfigStringValue(configFile,SERVICE_PAR,NTP_SERVICE”,tmp);intuse=1;if(use=0)/never(printf(Notusentp.n);stringresponse(Fail.);WriteL
8、og(filepath,response,Nouse);return0;)if(!serverNo)res=GetConfigStringValue(configFile,SERVICE_PAR,NTP_SERVER”,tmp);elseres=GetConfigStringValue(configFile,SERVICE_PAR,NTP_SERVER1,tmp);stringserver(tmp);coutserverendl;stringresponse;if(res)printf(Errorreadingconfigfile!n);response=Fail.;WriteLog(file
9、path,response,server);return-1;)elsecharcmd256;memset(cmd,0,sizeof(cmd);sprintf(cmd,sudontpdate%sn,tmp);response=getCmdResult(cmd);stringmsg=response.empty()?Fail.:response;WriteLog(filepath,msg,server);return0;)return0;intCompareString(char*pInStr1,char*pInStr2);intGetKeyValue(FILE*fpConfig,char*pI
10、nKeyName,char*pOutKeyValue);intGetConfigIntValue(char*pInFileName,char*pInSectionName,char*pInKeyName,int*pOutKeyValue);intGetConfigStringValue(char*pInFileName,char*pInSectionName,char*pInKeyName,char*pOutKeyValue);#endif/CONFIG_FILE_H1.2.3config_file.cpp產(chǎn)*FileName:config.cFileFunc:定義實(shí)現(xiàn)文件Version:V0
11、.11.2.2config_file.h#ifndefCONFIG_FILE_H#defineCONFIG_FILE_H#defineSUCCESS#defineFAILURE0 x00/*成功*/0 x01/*失敗*/#defineFILENAME_NOTEXIST0 x02/*配置文件名不存在*/#defineSECTIONNAME_NOTEXIST#defineKEYNAME_NOTEXIST#defineSTRING_LENNOTEQUAL#defineSTRINGNOTEQUAL0 x03/*節(jié)名不存在*/0 x04/*鍵名不存在*/0 x05/*兩個(gè)字符串長度不同*/0 x06/*
12、兩個(gè)字符串內(nèi)容不相同*/#defineSTRING_EQUAL0 x00/*兩個(gè)字符串內(nèi)容相同*/Author:SunrierDate:2012-05-09Descp:Linux下獲取配置文件信息*/#include#include#include#includeconfig_file.hintGetConfigStringValue(char*pInFileName,char*pInSectionName,char*pInKeyName,char*pOutKeyValue)FILE*fpConfig;charszBuffer150;char*pStr1,*pStr2;intiRetCode=
13、0;/*test*/*printf(pInFileName:%s!n,pInFileName);printf(pInSectionName:%s!n,pInSectionName);printf(pInKeyName:%s!n,pInKeyName);*/memset(szBuffer,0,sizeof(szBuffer);if(NULL=(fpConfig=fopen(pInFileName,r)returnFILENAME_NOTEXIST;while(!feof(fpConfig)if(NULL=fgets(szBuffer,150,fpConfig)break;pStr1=szBuff
14、er;while(=*pStr1)|(t=*pStr1)pStr1+;if(=*pStr1)pStr1+;while(=*pStr1)|(t=*pStr1)pStr1+;pStr2=pStr1;while(!=*pStr1)&(0!=*pStr1)pStr1+;if(0=*pStr1)continue;while(=*(pStr1-1)pStr1-;*pStr1=0;iRetCode=CompareString(pStr2,pInSectionName);if(!iRetCode)/*檢查節(jié)名*/iRetCodeGetKeyValue(fpConfig,pInKeyName,pOutK
15、eyValue);fclose(fpConfig);returniRetCode;fclose(fpConfig);returnSECTIONNAME_NOTEXIST;/*區(qū)分大小寫*/intCompareString(char*pInStr1,char*pInStr2)if(strlen(pInStr1)!=strlen(pInStr2)returnSTRING_LENNOTEQUAL;/*while(toupper(*pInStr1)=toupper(*pInStr2)*/while(*pInStr1=*pInStr2)if(0=*pInStr1)break;pInStr1+;pInSt
16、r2+;if(0=*pInStr1)returnSTRING_EQUAL;returnSTRING_NOTEQUAL;intGetKeyValue(FILE*fpConfig,char*pInKeyName,char*pOutKeyValue)(charszBuffer150;)*/*#includechar*pStr1,*pStr2,*pStr3;unsignedintuiLen;intiRetCode=0;memset(szBuffer,0,sizeof(szBuffer);while(!feof(fpConfig)(if(NULL=fgets(szBuffer,150,fpConfig)
17、break;pStr1=szBuffer;while(=*pStr1)|(t=*pStr1)pStr1+;if(#=*pStr1)continue;if(/=*pStr1)&(/=*(pStr1+1)continue;if(0=*pStr1)|(0 x0d=*pStr1)|(0 x0a=*pStr1)continue;if(=*pStr1)(pStr2=pStr1;while(T!=*pStr1)&(0!=*pStr1)pStr1+;if(=*pStr1)break;pStr1=pStr2;pStr2=pStrl;while(=!=*pStr1)&(0!=*pStr1)
18、pStr1+;if(0=*pStr1)continue;pStr3=pStr1+1;if(pStr2=pStr1)continue;*pStr1=0;pStr1-;while(=*pStr1)|(t=*pStr1)*pStr1=0;pStr1-;iRetCode=CompareString(pStr2,pInKeyName);if(!iRetCode)/*檢查鍵名*/pStr1=pStr3;while(=*pStr1)|(t=*pStr1)pStr1+;pStr3=pStr1;while(0!=*pStr1)&(0 x0d!=*pStr1)&(0 x0a!=*pStr1)if(7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年春七年級語文下冊 第三單元 12 賣油翁說課稿 新人教版
- 12古詩三首《己亥雜詩》說課稿-2024-2025學(xué)年語文五年級上冊統(tǒng)編版
- 15 分享真快樂(說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治 一年級下冊001
- 2025裝修工程泥工承包合同
- 7讓弦發(fā)出高低不同的聲音 說課稿-2024-2025學(xué)年科學(xué)四年級上冊教科版
- 2024-2025學(xué)年高中歷史 專題四 王安石變法 一 積貧積弱的北宋教學(xué)說課稿 人民版選修1
- 14 請幫我一下吧 第一課時(shí) 說課稿-2023-2024學(xué)年道德與法治一年級下冊統(tǒng)編版
- 6我們神圣的國土 第1課時(shí)(說課稿)-部編版道德與法治五年級上冊
- 2023八年級英語下冊 Module 1 Feelings and impressions Unit 2 I feel nervous when I speak Chinese第三課時(shí)說課稿 (新版)外研版
- 2024-2025學(xué)年新教材高中語文 第二單元 6.2 文氏外孫入村收麥說課稿(3)部編版必修上冊
- 廣東省廣州黃埔區(qū)2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試卷(含答案)
- 法理學(xué)課件馬工程
- 《無菌檢查培訓(xùn)》課件
- 2024-2030年中國香菇行業(yè)銷售狀況及供需前景預(yù)測報(bào)告
- 高中英語必背3500單詞表(完整版)
- GB/T 44570-2024塑料制品聚碳酸酯板材
- 禁止送禮的協(xié)議書
- 2024年版《輸變電工程標(biāo)準(zhǔn)工藝應(yīng)用圖冊》
- 2024年高考數(shù)學(xué)試卷(北京)(空白卷)
- 2024從洞見到生意:阿里健康特色人群消費(fèi)趨勢報(bào)告-阿里健康x一財(cái)商學(xué)院
- 《2023-2024中國區(qū)塊鏈發(fā)展年度報(bào)告》
評論
0/150
提交評論