英創工控主板產品,大多數都應用于連續工作的工業環境中,對實時時鐘有普遍的需求。由于RTC晶體總是有一定誤差的,我們控制的精度為+/-10ppm,對長期運行的設備就需要在線自動校時功能。我們可以利用標準的SNTP協議來實現這個功能。
在Windows CE中校時功能是作為標準服務,由service.exe來管理運行的。對應用程序來說,只需要執行下面的簡短代碼,就可實現SNTP的對時功能:
WCHAR szControlString[] = L'sync';
DWORD dwLenIn = sizeof(szControlString);
HANDLEhFile = CreateFile(L'NTP0:', GENERIC_READ|GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
printf('Open NTP0: failed\r\n');
return 0;
}
//執行時間同步操作
DeviceIoControl(hFile, IOCTL_SERVICE_CONTROL, szControlString, dwLenIn, NULL, 0, NULL, NULL);
CloseHandle(hFile);
如果客戶直接引用上述代碼在現有的主板上運行,發現對時不成功。這主要是由于微軟發布的缺省release版的timesvc.dll似乎有些問題,需要重新build之后才能有效。我們會在5.1之后的標準版中增加SNTP校時功能。對先前已購買的客戶,若需要使用SNTP校時功能,可與我們聯系,以更新內核。
SNTP還有一組注冊表,在使用前可能需要關注一下。
[HKEY_LOCAL_MACHINE\Services\Timesvc]
'AutoUpdate'=dword:0
'ClientOnly'=dword:1
'AutoDST'=dword:0 ; auto Daylight Saving Time
'Trustlocalclock'=dword:0 ;只能為0
'Refresh'=dword:48190800 ; 2 weeks
'RecoveryRefresh'=dword:1B7740 ; 30 minutes
'Threshold'=dword:5265C00 ; 1 day
'Server'='pool.ntp.org'
注冊表中的各項參數都可在msdn中找到解釋,所以只對特殊的情況進行簡要說明。“Server”指定的是網上的SNTP服務器,根據實際應用,也可以改成ip地址。注意使用URL時,需要在userinfo.txt中配置好DNS服務器的ip。如果AutoUpdate設置為1,每次系統上電復位啟動時,都會自動進行一次SNTP校時。Timesvc下還有一些參數沒有列出,哪些參數是完全不能改的。
-
WINDOWS
+關注
關注
3文章
3525瀏覽量
88446 -
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35222
發布評論請先 登錄
相關推薦
評論