為了幫助用戶提高生產(chǎn)測(cè)試效率,我們提供了代為客戶拷貝應(yīng)用程序的服務(wù),在主板出廠之前我們會(huì)將用戶提交的所有程序和文件拷貝到用戶指定的系統(tǒng)目錄中,用戶拿到主板后可直接裝機(jī)測(cè)試,大大節(jié)省了生產(chǎn)測(cè)試時(shí)間。客戶也可參考此方法,在自己的整機(jī)生產(chǎn)中實(shí)現(xiàn)應(yīng)用程序及配置文件的自動(dòng)拷貝。本文以下介紹在CE平臺(tái)實(shí)現(xiàn)應(yīng)用程序及配置文件自動(dòng)拷貝的具體步驟。
英創(chuàng)主板處于調(diào)試模式啟動(dòng)時(shí),會(huì)查詢系統(tǒng)的usbdisk根目錄下是否有名為autotest.txt的配置文件,如果配置文件存在則會(huì)執(zhí)行文件中指定的exe程序,程序的拷貝正是利用系統(tǒng)的這一功能自動(dòng)實(shí)現(xiàn)的。
實(shí)現(xiàn)程序的自動(dòng)拷貝需要以下幾個(gè)步驟:
1、編寫autotest.txt配置文件
配置文件中需要指定要啟動(dòng)的exe完整路徑,同時(shí)可配置系統(tǒng)網(wǎng)口1的網(wǎng)絡(luò)參數(shù),下面是示例配置。
[LOCAL_MACHINE] DefaultGateway="192.168.201.19" IPAddress="192.168.201.220" SubnetMask="255.255.255.0" [USER_EXE] Name="\usbdisk\autocfg.exe" Parameters="" [SYSTEM] Store="25" |
2、編寫自動(dòng)配置程序
配置程序autocft.exe一般需要實(shí)現(xiàn)將應(yīng)用程序拷貝到主板指定目錄的功能,同時(shí)也可完成用戶自定義的一些配置功能,比如增加特定注冊(cè)表、燒寫開(kāi)機(jī)畫面等。下面是一些示例代碼可供用戶參考。
AutoCopy函數(shù)實(shí)現(xiàn)將當(dāng)前執(zhí)行的配置程序所在目錄的全部文件拷貝到系統(tǒng)的nandflash目錄中。
DWORD AutoCopy( ) { DWORD dwResult; TCHAR szCurrentDir[MAX_PATH]; TCHAR szLocalFile[MAX_PATH]; TCHAR szNewFile[MAX_PATH]; TCHAR szDisFolder[MAX_PATH]; CHAR localFile[MAX_PATH]; CHAR newFile[MAX_PATH]; int i1, diskType; dwResult = GetModuleFileName( NULL,szCurrentDir, sizeof( szCurrentDir ) ); if( 0 == dwResult ) { printf("GetModuleFileName failure!\r\n" ); return -1; } TCHAR *pch = _tcsrchr( szCurrentDir, '\\' ); *(pch+1) = '\0'; _tcslwr(szCurrentDir); pch = _tcsstr( szCurrentDir, _T("usb") ); if( NULL != pch ) { _tcscpy( szLocalFile, szCurrentDir ); _tcscat( szLocalFile, _T("*.*")); diskType = 1; GetFolderName(diskType, szDisFolder); HANDLE hFind; WIN32_FIND_DATA FindFileData; BOOL BFind; hFind = FindFirstFile( szLocalFile, &FindFileData); if(hFind != INVALID_HANDLE_VALUE) { BFind = TRUE; while( BFind ) { if( FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY ) { _tcscpy( szLocalFile, szCurrentDir ); _tcscat( szLocalFile, FindFileData.cFileName ); _stprintf(szNewFile, _T("\\%s\"), szDisFolder); _tcscat( szNewFile, FindFileData.cFileName ); dwResult = CopyFile( szLocalFile, szNewFile, FALSE ); memset( localFile, 0, sizeof(localFile)); i1 = wcslen( szLocalFile ); wcstombs( localFile, szLocalFile, i1 ); memset( newFile, 0, sizeof(newFile)); i1 = wcslen( szNewFile ); wcstombs( newFile, szNewFile, i1 ); if( dwResult == 0 ) { printf("Copy %s to %s failure!\r\n", localFile, newFile ); return -1; } else { printf("Copy %s to %s successful!\r\n", localFile, newFile ); } } BFind = FindNextFile( hFind, &FindFileData ); } } FindClose( hFind ); } return 0; } // Get "Folder" name from register. // type = 0: SDMemory // type = 1: Nand // type = 2: USB // type = 3: EMMC // void GetFolderName( int type, LPWSTR szName ) { HKEY hKey = NULL; DWORD dwType=REG_SZ; DWORD size=100; DWORD ret; TCHAR szFolderPath[80]; switch( type ) { case 0: _tcscpy( szFolderPath, REG_SDFOLDER_PATH ); break; case 1: _tcscpy( szFolderPath, REG_NANDFOLDER_PATH ); break; case 2: _tcscpy( szFolderPath, REG_USBFOLDER_PATH ); break; case 3: _tcscpy( szFolderPath, REG_EMMC_PATH ); break; default: return; } //get the folder Name from registry in case BSP is using non-default name if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPWSTR)szFolderPath, 0, NULL, REG_OPTION_NON_VOLATILE, 0, NULL, &hKey, NULL)) { ret=RegQueryValueEx(hKey, L"Folder", 0, &dwType, (BYTE*)szName, &size); if (ret!=ERROR_SUCCESS) RETAILMSG(1,(L"RegQueryValueEx returned error %d dwType=%d size=%dbufSz=%d\r\n", ret,dwType,size,sizeof(szName))); } if( hKey!=NULL ) RegCloseKey(hKey); return; } |
英創(chuàng)主板支持開(kāi)機(jī)畫面在線更新,《WinCE工控主板在線更新開(kāi)機(jī)畫面(2017新版)》中提到的lu程序,用戶也可以在配置程序中直接調(diào)用實(shí)現(xiàn)開(kāi)機(jī)畫面的自動(dòng)更新,下面是利用lu更新U盤目錄下usersplash800480.bmp圖片的示例代碼。
PROCESS_INFORMATION processInfo; TCHAR szProgram[] = _T("lu.exe"); TCHAR szCmdLine[100] = _T("usbdisk\\usersplash800480.bmp"); BOOL result = CreateProcess( szProgram, szCmdLine,NULL, NULL, FALSE,CREATE_NEW_CONSOLE, NULL, NULL, NULL, &processInfo ); if( result == 0 ) { //執(zhí)行失敗... } |
3、將autotest.txt放在U盤根目錄,同時(shí)將配置程序autocft.exe和需要拷貝到主板上的應(yīng)用程序及文件放在U盤指定目錄中。
4、將U盤連接到英創(chuàng)主板,主板在調(diào)試模式啟動(dòng)后會(huì)自動(dòng)執(zhí)行用戶指定的配置程序,完成系統(tǒng)配置工作。
系統(tǒng)默認(rèn)只會(huì)執(zhí)行一次查詢autotest.txt啟動(dòng)配置程序的過(guò)程,如果希望這個(gè)功能總是有效,可在配置程序開(kāi)始處增加一個(gè)清除注冊(cè)表標(biāo)志的工作,當(dāng)系統(tǒng)注冊(cè)表項(xiàng)HKEY_LOCAL_MACHINE\Emtronix或HKEY_LOCAL_MACHINE\Wstartup下的Count等于0時(shí),系統(tǒng)在調(diào)試模式下就會(huì)查詢U盤中的autotest.txt配置文件。下面是count清零代碼。
HKEY hKey; DWORD dwVal, dwRet; DWORD dwType = REG_DWORD; DWORD dwBufLen = sizeof(DWORD); if((dwRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Emtronix"), 0, 0, &hKey)) != ERROR_SUCCESS) { dwRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Wstartup"), 0, 0, &hKey); } if(dwRet == ERROR_SUCCESS) { dwVal = 0; RegSetValueEx(hKey, _T("Count"), 0, dwType, (BYTE*)&dwVal, dwBufLen); RegCloseKey(hKey); // close registry } |
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35617
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何導(dǎo)出交換機(jī)的配置文件
配置Skywalking告警
![<b class='flag-5'>配置</b>Skywalking告警](https://file1.elecfans.com/web3/M00/06/36/wKgZO2eIdk-ABPyvAAAe4LpFel4047.png)
迅為RK3568開(kāi)發(fā)板篇OpenHarmony配置HDF驅(qū)動(dòng)控制LED-配置創(chuàng)建私有配置文件
linux網(wǎng)卡配置文件
docker-compose配置文件內(nèi)容詳解以及常用命令介紹
![docker-compose<b class='flag-5'>配置文件</b>內(nèi)容詳解以及常用命令介紹](https://file1.elecfans.com/web3/M00/00/AB/wKgZO2dNEEaAEoyIAAALko9gT-Q935.png)
中科創(chuàng)達(dá)榮獲2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)
springboot的項(xiàng)目如何既要用jar包啟動(dòng),同時(shí)還可以為不同的機(jī)房設(shè)置不同的配置文件
![springboot的項(xiàng)目如何既要用jar包啟動(dòng),同時(shí)還可以為不同的機(jī)房設(shè)置不同的<b class='flag-5'>配置文件</b>](https://file1.elecfans.com//web2/M00/0A/90/wKgaomcQeDuADj7fAAN472XZMDI744.png)
如何使用SCP和Rsync遠(yuǎn)程拷貝文件
HID over GATT配置文件(HOGP)低功耗藍(lán)牙
![HID over GATT<b class='flag-5'>配置文件</b>(HOGP)低功耗藍(lán)牙](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
確定LDO的任務(wù)配置文件兼容性
![確定LDO的任務(wù)<b class='flag-5'>配置文件</b>兼容性](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):FA模型應(yīng)用配置文件
![鴻蒙開(kāi)發(fā)Ability Kit<b class='flag-5'>程序</b>框架服務(wù):FA模型應(yīng)用<b class='flag-5'>配置文件</b>](https://file1.elecfans.com/web2/M00/C5/D5/wKgZomYCnRSAcOMcAACEEnttXHc600.png)
鴻蒙開(kāi)發(fā):【Stage模型應(yīng)用配置文件】
![鴻蒙開(kāi)發(fā):【Stage模型應(yīng)用<b class='flag-5'>配置文件</b>】](https://file1.elecfans.com/web2/M00/EB/49/wKgaomZYGf-AbJxuAAWQ7RqfYmE388.jpg)
使用Docker部署Go Web應(yīng)用程序步驟
![使用Docker部署Go Web<b class='flag-5'>應(yīng)用程序</b>步驟](https://file1.elecfans.com/web2/M00/D1/67/wKgZomYjG8yAboHUAAAU3ZokeRA952.png)
RX78M組 EtherCAT ETG.5003示例程序固件信息技術(shù)
![RX78M組 EtherCAT ETG.5003示例<b class='flag-5'>程序</b>固件<b class='flag-5'>信息技術(shù)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
支持CiA402驅(qū)動(dòng)器配置文件的示例程序用于通過(guò)EtherCAT?通信進(jìn)行電機(jī)控制
![支持CiA402驅(qū)動(dòng)器<b class='flag-5'>配置文件</b>的示例<b class='flag-5'>程序</b>用于通過(guò)EtherCAT?通信進(jìn)行電機(jī)控制](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論