CETK测试原理/测试方法/测试结果分析以及常见WinCE Test Kit运行问题的排查
??????小弟這兩天學(xué)習(xí)和分析了CETK,并總結(jié)了一份文檔,粘貼出來,希望對各位有用。
????? 因為文章有26頁,沒有辦法在一篇帖子中羅列出來,我分好幾個帖子進行羅列。
?
CONTENT
?
?
一.CETK概述
1.CETK是什么
2.工作原理簡述
3.默認(rèn)的測試模塊
二.使用方法[IMPORTANT]
1.在PB中添加對CETK的支持
1> 添加CETK Feature
2> 配置Work Station和Target Device的連接方式
2.Windows CE Test Kit的使用方法
1> 運行Windows CE Test Kit
2> 連接Target Device
3> 啟動測試
4> 查看測試結(jié)果
5> 分析測試結(jié)果
三.定制自己的CETK DLL(ADV)
1.編寫自己的CETK DLL
1>? CETK DLL的結(jié)構(gòu)
2> 編寫自己的測試DLL
2.添加自己定制的測試DLL到CETK
3.運行自己定制的CETK測試項
四.常見錯誤
1.連接Target Device錯誤
2.測試Item啟動不成功
一.CETK概述
1.CETK是什么
?????? CETK全稱是Microsoft? Windows? CE 5.0 Test Kit,用來對OEM廠商為Windows CE開發(fā)的設(shè)備驅(qū)動進行測試,同時也可以測試OAL等。其支持所有Windows CE所支持的CPU,對于那些Windows CE默認(rèn)不支持的外設(shè),用戶可以自己去開發(fā)測試DLL并導(dǎo)入到CETK中進行測試。
2.工作原理簡述
?????? 在Work Station-Target Device模式下,PC端的cetest.exe(即Windows CE Test Kit)和Device端進行連接后,會將ClientSide.exe拷貝到Device的對象存儲根目錄下并將其運行起來,后續(xù)的測試過程中,PC和Device通過用戶設(shè)定的通信方式進行交互。
交互的內(nèi)容包括一些Log信息和命令等,Log信息的來自于模塊Kato來,而命令來自于CETEST.exe。
?????? 而具體負(fù)責(zé)測試的DLL就是下圖中的Tux Test DLLs。
3.默認(rèn)的測試模塊
?????? 默認(rèn)的測試模塊包括:Audio、BT、CD/DVD ROM、Direct3D、DirectDraw、FSD、GDI、IR(1.1/2.0)、Keyboard、Mouse、NDIS、OAL、PD、RDP、Storage Device、Telephony、Touch、Winsock、Serial和Parallel等。
二.使用方法[IMPORTANT]
1.在PB中添加對CETK的支持
1> 添加CETK Feature
?????? 依次選擇View | Catalog,打開Feature添加窗口,添加下圖中的Windows CE Test Kit到當(dāng)前的工程中。
?????? 添加Windows CE Test Kit完成的功能是將Client Side 文件添加到 Build Release 文件夾中。Client Side應(yīng)用程序完成的在Work Station和Target Device連接的時候被Platform Builder下載到Target Device上,并用來和Work Station的CETest.exe進行通信。
2> 配置Work Station和Target Device的連接方式
?????? 打開StartàAll programsàMicrosoft Windows CE 5.0àWindows CE 5.0 Test Kit,其實也就是運行cetest.exe工具,選擇ConnectionàStart Client,看到如下的窗口:
?????? 選擇Settings,看到如下的窗口:
?????? 選擇Properties,并在如下的彈出出窗口中去配置通信方式,典型的配置是使用ActiveSync進行連接。
2.Windows CE Test Kit的使用方法
1> 運行Windows CE Test Kit
?????? 默認(rèn)情況下,Windows CE Test Kit的可執(zhí)行程序cetest.exe位于目錄C:/Program Files/Windows CE Platform Builder/5.00/CEPB/wcetk下。
?????? 通過下列的方式可以啟動Windows CE Test Kit:
l???????? 直接運行目錄C:/Program Files/Windows CE Platform Builder/5.00/CEPB/wcetk下的cetest.exe;
l???????? 從開始菜單啟動,依次選擇StartàAll ProgramsàMicrosoft Windows CE5.0àMicrosoft Windows CE Test Kit
l???????? 從Platform Builder啟動,依次選擇Toolsà Windows CE Test Kit
對于后兩個方式如果不能夠啟動,并提示找不到可執(zhí)行程序的話,可以將cetest.exe從C:/Program Files/Windows CE Platform Builder/5.00/CEPB/wcetk下拷貝到[安裝Platform Builder的邏輯磁盤盤符]:/Program Files/Windows CE Platform Builder/5.00/CEPB/wcetk下再次運行即可。
運行起來之后,其主界面如下圖所示:
2> 連接Target Device
在WorkStation測試模式下,需要和Target Device進行連接以進行通信。
選擇主菜單中的ConnectionàStart Client,打開如下窗口:
?????? 點擊選擇Settings,打開如下的配置窗口:
?????? 點擊Properties按鈕,在如下的打開窗口中去配置連接方式,典型的配置是采用ActiveSync方式。
?????? 配置完連接方式后,點擊OK退回到Device Connection窗口,點擊Connect按鈕,則Windows CE Test Kit開始和Target Device進行連接,并拷貝PC機Release目錄下的ClientSide.exe到Target Device的Object Store的根目錄下,然后開始對Target Device的模塊進行檢測。
如果一切連接正常,最終會看到如下的窗口:
?????? Target Device上不支持的模塊, 表示支持的模塊,而 表示當(dāng)前的Test Kit, 表示未選中的Test Kit。
3> 啟動測試
>> 一次性測試所有模塊
Win CE Test Kit中共包括3項Test Kit,在具體的某一Test Kit中右鍵并選擇Select All,則當(dāng)前處于選擇狀態(tài)的Test Kit的所有測試模塊的測試項都被選中,如下圖所示:
?????? 在Windows CE Test Kit連接到Target Device并檢測到所有的模塊后,就可以對當(dāng)前檢測到的所有模塊開始測試。
?????? 對所有模塊進行測試的方法如下:
l???????? 在選中的Test Kit上右鍵并選擇Select All Test,則當(dāng)前Test Kit下所有模塊的測試項都被選中;
l???????? 然后選擇主菜單中的TestsàStart/Stop TestsàWindows CE(ARMV4I),啟動當(dāng)前選中的所有模塊的測試。
如果想停止當(dāng)前測試,依然是選擇TestsàStart/Stop TestsàWindows CE(ARMV4I),如下圖所示:
>> 測試單個模塊
如果要啟動默認(rèn)模塊測試的方法如下圖所示:
>>?? 指定測試模塊的具體測試項
如果覺得模塊測試的時間太長,或者僅僅是想針對模塊的特定測試Item進行測試的話,可以編輯測試Command,選擇上圖中的Edit Command Line,在如下彈出的窗口中編輯傳遞給Tux的測試命令。
?????? Serial Prot包括1001~1009共9項測試,如果要指定測試1007,可以在Command Line中輸入tux -0 –d serdrvbvt –x 1007,其中-x是tux語法的關(guān)鍵詞,用來指定測試項的編號,如果要指定測試1007和1008可以輸入tux -0 –d serdrvbvt –x 1007,1008,如果要測試1007&1008&1009可以輸入tux -0 –d serdrvbvt –x 1007-1009。注意編輯命令的時候不同的測試項之間最好不要加入空格,否則會報錯。
?????? 另外,為了不影響后續(xù)對該模塊的測試,在測試完之后應(yīng)該將Command Line Restore(選擇上面窗口中的Restore按鈕)或者關(guān)閉WinCE Test Kit,這樣就可以將剛才編輯的命令還原為默認(rèn)值。
4> 查看測試結(jié)果
>> 查看當(dāng)前測試結(jié)果
以查看Serial Port的測試結(jié)果為例,依次在Tests菜單項下做如下的選擇:
?????? 將看到如下的測試結(jié)果:
>> 查看以前測試結(jié)果
?????? 所有的測試結(jié)果都會被保存到[安裝PB的邏輯磁盤盤符]:/Program Files/Windows CE Platform Builder/5.00/CEPB/WCETK/results/WindowsCE_(ARMV4I)目錄下。該目錄下會包含很多以測試日期命名的文件夾,對于某一天的很多次測試結(jié)果,又以啟動測試的具體HH-MM-SS進行命令。
?????? 目錄結(jié)構(gòu)如下:
?????? 可以直接打開這些Log文件進行查看。
?
??????
>> 如何打開CETK工具
StartàAll programsàMicrosoft Windows CE 5.0àWindows CE 5.0 Test Kit
如果提示找不到CETK的工具,則重新指定到安裝路徑/Windows CE Platform ?Builder/5.00/CEPB/WCETK下的cetest.exe。
>> 配置CETK通信分類
有兩種方式,Platform Manager和WinSock
>> 配置CETK測試中WorkStation和Target Device的連接方式
?????? 用來選擇通信方式。
5> 分析測試結(jié)果
應(yīng)該分析測試結(jié)果中Skip和Failed的測試Item。
弄清楚測試Item主要測試哪些內(nèi)容有如下三種途徑:
l???????? 對于簡單的測試Item,通過測試結(jié)果的Log信息就可以知道其在測試那些內(nèi)容;
l???????? 對于稍微復(fù)雜一點的Item,可以通過在測試項上右鍵選擇Test Information,直接跳轉(zhuǎn)到Platform Builder的help文檔中進行查詢,如下;
l???????? 對于特別復(fù)雜的測試項,可以到Platform Builder安裝目錄下/PRIVATE/TEST搜索查詢其測試源文件。
需要指出的是,并不是所有的Skipped和Failed測試Item都是由OEM廠商的Driver和OAL造成的,部分情況下是由Microsoft的測試代碼本身的Bug引起,這個時候就需要根據(jù)測試源碼來進行判斷。
可以在修改完Microsoft的測試源碼中的Bug后,重新編譯并進行測試。編譯的時候注意修改sources和頭文件,因為Microsoft的很多CETK測試源碼中的存在很多頭文件沒有加全的情況,而sources文件的錯誤更多,如果修改源碼并進行編譯,主要的工作就是在修改sources文件上。
從以往的測試經(jīng)驗和網(wǎng)上的評論來看,絕大部分的Failed Item是由OEM廠商添加的代碼的Bug造成,而Skipped Item由Microsoft測試代碼的Bug引起的情況相對多一點。我們可以只分析Failed Item,而對Skipped Item不用理會,除非出現(xiàn)大量的Skipped Item。
再者,通過CETK測試并不能說明OEM的代碼由多么的正確,只能夠說明其在基本功能沒有問題,與系統(tǒng)的兼容性和及其可靠性方面基本符合要求。但是CETK測試并不能夠模仿所有的用戶行為,也不能模仿測試系統(tǒng)上PNP設(shè)備的兼容性,在性能測試方便CETK也比較少。
?
?
三.定制自己的CETK DLL(ADV)
1.編寫自己的CETK DLL
1> ?CETK DLL的結(jié)構(gòu)
安裝Platform Builder的時候,除了安裝了測試用的DLL到路徑<Platform Builder installation path>/Cepb/Wcetk/DDTK/<CPU>下,同時也將其源碼安裝到目錄<Platform Builder安裝目錄>/WINCE500/PRIVATE/TEST下。
>> ShellProc接口的功能
?????? 測試DLL可以有多個導(dǎo)出接口,但只有一個導(dǎo)出接口是必須的,即ShellProc函數(shù)。該函數(shù)包括很多分支,如下:
| SHELLPROCAPI ShellProc(UINT uMsg, SPPARAM spParam) { ??? LPSPS_BEGIN_TEST??? pBT; ??? LPSPS_END_TEST????? pET; ? ??? switch (uMsg) ??? { ??? case SPM_LOAD_DLL: ??????? Debug(TEXT("ShellProc(SPM_LOAD_DLL, ...) called")); ? ??????? // If we are UNICODE, then tell Tux this by setting the following flag. #ifdef UNICODE ??????? ((LPSPS_LOAD_DLL)spParam)->fUnicode = TRUE; #endif // UNICODE ??????? g_pKato = (CKato*)KatoGetDefaultObject(); ??????? break; ? ??? case SPM_UNLOAD_DLL: ??????? Debug(TEXT("ShellProc(SPM_UNLOAD_DLL, ...) called")); ??????? break; ? ??? case SPM_SHELL_INFO: ??????? Debug(TEXT("ShellProc(SPM_SHELL_INFO, ...) called")); ? ??????? // Store a pointer to our shell info for later use. ??????? g_pShellInfo = (LPSPS_SHELL_INFO)spParam; ??????? break; ? ??? case SPM_REGISTER: ??????? Debug(TEXT("ShellProc(SPM_REGISTER, ...) called")); ??????? ((LPSPS_REGISTER)spParam)->lpFunctionTable = g_lpFTE; #ifdef UNICODE ??????? return SPR_HANDLED | SPF_UNICODE; #else // UNICODE ??????? return SPR_HANDLED; #endif // UNICODE ? ??? case SPM_START_SCRIPT: ??????? Debug(TEXT("ShellProc(SPM_START_SCRIPT, ...) called")); ??????? break; ? ??? case SPM_STOP_SCRIPT: ??????? Debug(TEXT("ShellProc(SPM_STOP_SCRIPT, ...) called")); ??????? break; ? ??? case SPM_BEGIN_GROUP: ??? ????Debug(TEXT("ShellProc(SPM_BEGIN_GROUP, ...) called")); ??????? g_pKato->BeginLevel(0, TEXT("BEGIN GROUP: Passion_Memory_Test.DLL")); ??????? break; ? ??? case SPM_END_GROUP: ??????? Debug(TEXT("ShellProc(SPM_END_GROUP, ...) called")); ??????? g_pKato->EndLevel(TEXT("END GROUP: Passion_Memory_Test.DLL")); ??????? break; ? ??? case SPM_BEGIN_TEST: ??????? Debug(TEXT("ShellProc(SPM_BEGIN_TEST, ...) called")); ??????? // Start our logging level. ??????? pBT = (LPSPS_BEGIN_TEST)spParam; ??????? g_pKato->BeginLevel( ??????????? pBT->lpFTE->dwUniqueID, ??????????? TEXT("BEGIN TEST: /"%s/", Threads=%u, Seed=%u"), ??????????? pBT->lpFTE->lpDescription, ??????????? pBT->dwThreadCount, ??????????? pBT->dwRandomSeed); ??????? break; ? ??? case SPM_END_TEST: ??????? Debug(TEXT("ShellProc(SPM_END_TEST, ...) called")); ??????? // End our logging level. ??????? pET = (LPSPS_END_TEST)spParam; ??????? g_pKato->EndLevel( ??????????? TEXT("END TEST: /"%s/", %s, Time=%u.%03u"), ??????????? pET->lpFTE->lpDescription, ??????????? pET->dwResult == TPR_SKIP ? TEXT("SKIPPED") : ??????????? pET->dwResult == TPR_PASS ? TEXT("PASSED") : ??????????? pET->dwResult == TPR_FAIL ? TEXT("FAILED") : TEXT("ABORTED"), ??????????? pET->dwExecutionTime / 1000, pET->dwExecutionTime % 1000); ??????? break; ? ??? case SPM_EXCEPTION: ??????? Debug(TEXT("ShellProc(SPM_EXCEPTION, ...) called")); ??????? g_pKato->Log(LOG_EXCEPTION, TEXT("Exception occurred!")); ??????? break; ? ??? default: ??????? return SPR_NOT_HANDLED; ??? } ? ??? return SPR_HANDLED; } ? |
?????? 該函數(shù)并不需要去修改,但是也可以在這個函數(shù)中完成一些附加的功能,例如打印一些Log等等。對于理解整個測試DLL有用的分支解釋如下:
l???????? SPM_REGISTER:TUX通過調(diào)用該接口獲取測試DLL所支持的測試項,這個是最需要關(guān)注的一個分支;
l???????? SPM_BEGIN_GROUP:整個測試過程開始調(diào)用到;
l???????? SPM_BEGIN_TEST:在開始測試Item時調(diào)用到,具體的測試項編號由TUX指定,包含哪些測試項后續(xù)會進行說明。
l???????? SPM_END_TEST:在結(jié)束具體測試Item時調(diào)用到;
l???????? SPM_END_GROUP:整個測試過程結(jié)束調(diào)用到;
>> 具體的測試項
?????? 前面已經(jīng)提到,TUX通過調(diào)用ShellProc的SPM_REGISTER 分支來獲取測試DLL所支的具體測試項,每個測試項都有一個編號。對于測試DLL來說,所有的測試Item及其編號記錄在一個名稱為g_lpFTE的數(shù)組中。
?????? 該數(shù)組的內(nèi)容如下:
| #define BASE 1000[Passion1]? ? BEGIN_FTE[Passion2]? ??? FTH("Read/Write All Sectors"?? , 0 ) ??? FTE(?? "1 Sector at a time"??? , 1, ??1[Passion3]?,????? ?BASE+? 1[Passion4]?, WriteAllSectors [Passion5]?) ??? FTE(?? "4 Sectors at a time"?? , 1,?? 4,?????? BASE+? 2, WriteAllSectors ) ??? FTE(?? "16 Sectors at a time"? , 1,? 16,?????? BASE+? 3, WriteAllSectors ) ??? FTE(?? "32 Sectors at a time"? , 1,? 32,?????? BASE+? 4, WriteAllSectors ) ??? FTE(?? "64 Sectors at a time"? , 1,? 64,?????? BASE+? 5, WriteAllSectors ) ??? FTE(?? "128 Sectors at a time" , 1, 128,?????? BASE+? 6, WriteAllSectors ) ??? FTE(?? "5 Sectors at a time"?? , 1,?? 5,?????? BASE+? 7, WriteAllSectors ) ??? FTE(?? "13 Sectors at a time"? , 1,? 13,?????? BASE+? 8, WriteAllSectors ) ??? FTE(?? "129 Sectors at a time" , 1, 129,?????? BASE+? 9, WriteAllSectors ) END_FTE |
>> 編寫自己測試DLL中需要修改的內(nèi)容
?????? 從上面有關(guān)測試DLL結(jié)構(gòu)的描述中可以看到,用戶只需要在g_lpFTE數(shù)組中添加自己的測試函數(shù)和測試編號以及測試參數(shù),然后去實現(xiàn)自己的測試函數(shù)就可以了。
?????? 如果對這些不是很熟悉的話,可以借助Platform Builder的向?qū)韯?chuàng)建測試DLL,熟悉到一定程度后在已有的測試DLL基礎(chǔ)上進行修改效率更高。
2> 編寫自己的測試DLL
?????? Platform Builder提供了創(chuàng)建測試DLL的向?qū)?#xff0c;可以根據(jù)該向?qū)韯?chuàng)建測試DLL。
步驟如下:
l???????? 選擇FileàNew Project or File,打開創(chuàng)建向?qū)Т翱谌缦?/span>
?????? 在窗口中選擇WCE TUX DLL,并輸入工程名稱,注意工程名稱不能包含空格。點擊OK進入下一步。
l???????? 在下面的彈出向?qū)Т翱谥休斎胍恍┫嚓P(guān)測試DLL的信息,并選擇Next進入下一步。
l???????? 在下面的彈出窗口中選擇Next,進入下一步。
l???????? 在接下來的彈出窗口中選擇Release Type為CETK,然后選擇Finish完成創(chuàng)建。
?
?????? 如前邊所說,接下來去修改FT.h中的g_lpFTE數(shù)組并實現(xiàn)具體的測試函數(shù)即可。
2.添加自己定制的測試DLL到CETK
?????? 按照TUX接口的要求,編寫好自己的測試DLL后,可以通過下面的步驟將其導(dǎo)入到CETK測試中。
l???????? 選擇Windows CE Test Kit主菜單中的TestsàUser Defined,打開下面的用戶向?qū)Т翱?#xff1a;
l???????? 點擊選擇下一步,將看到下面的窗口,選擇Add a New Test
l???????? 接下來將看到下面的彈出窗口,詳細(xì)說明如下:
n???????? 在Test Kit下拉框中可以選擇將你要添加的測試放在哪個Test Kit下,系統(tǒng)中共有3個Test Kit
n???????? 在Name of Test編輯框中,為自己的測試Item起一個名字,格式上沒有任何要求,只要好記就行
n???????? 在Tux Module中,選擇供TUX調(diào)用的測試DLL,就是自己編寫的DLL
n???????? 在Command Line中,可以直接對向TUX傳送的命令進行編輯,如下圖中就對DLL中的101和102測試項進行測試。也可以采用默認(rèn)的命令,默認(rèn)的命令將根據(jù)測試DLL中提供的測試函數(shù)表格進行測試
n???????? Processor一欄中,用來對Target Device的CPU內(nèi)核的類型進行選擇,對于當(dāng)前我們的項目,就選擇ARMV4I
輸入和選擇完畢后,點擊下一步
l???????? 接下來將看到下面的窗口,可以在這里選擇將測試DLL存放在哪里,選項解釋如下:
n???????? Copy the files to the directory for user-defined tests:將測試DLL拷貝到系統(tǒng)預(yù)定義的用戶測試DLL的路徑下,即<Platform Builder installation path>/Cepb/Wcetk/User/<CPU>下。另外,Microsoft默認(rèn)PB自帶的測試DLL的路徑是<Platform Builder installation path>/Cepb/Wcetk /DDTK/ /<CPU>,在這里你可以找到所有的自帶的測試DLL;
n???????? Leave the file at current location:不改變存放DLL的路徑,下次啟動Windows CE Test Kit的時候,將不會再到這里去找User Defined的測試DLL;
所以,如果想將自己定制的測試永久添加到CETK中的話,應(yīng)該選擇第一個選項。
l???????? 點擊下一步,將看到如下窗口
l???????? 選擇下一步,看到如下窗口
l???????? 選擇完成,完成定制
?
3.運行自己定制的CETK測試項
?????? Windows CE Test Kit不會自動的將用戶自定義的測試項更新Test Kit中,需要重新連接Target Device才可以在Test Kit中看到用戶自定義的測試項。
?????? 重新連接后,將在<用戶選擇的Test Kit>/User Tests下看到自定義的測試項,如下圖:
?????? 運行的方法和默認(rèn)的測試項相同。
四.常見錯誤
1.連接Target Device錯誤
描述:
Tools下面的所有工具都不可用,并在啟動連接的過程中出現(xiàn)下面的窗口:
原因:
?????? Platform Manager的連接方式配置不正確。
解決方法:
?????? 選擇Connection菜單下的Configure Windows CE Platform Manager選項,如下:??????
?????? 將看到如下窗口:
?????? 選擇Properties按鈕,將看到如下的窗口:
?????? 在這里選擇你所使用的連接方式就可以了。
2.測試Item啟動不成功
描述:
可以正確連接Target Device,但不能執(zhí)行任何測試用例,會看到如下的彈出窗口:
原因:
Windows操作系統(tǒng)安裝在C盤,而WinCE安裝在其它邏輯盤下,導(dǎo)致測試的時候所需要的一些文件夾缺失。這應(yīng)該是Microsoft的Bug造成的,可以通過拷貝特定文件夾的方式來進行Fix。
同時某些殺毒軟件和防火墻也會造成這種問題。
解決方法:
將C:/Program Files/Windows CE Platform Builder/5.00/CEPB/wcetk目錄下results和users目錄拷貝到[安裝WinCE500的邏輯盤符]:/Program Files/Windows CE Platform Builder/5.00/CEPB/WCETK目錄下。
?????? 同時建議將防火墻和殺毒軟件關(guān)閉。
?????? 有時候會碰到Windows CE Test Kit運行得時候提示找不到路徑的情況,也是這種原因引起的,解決方法是將cetest.exe從System盤下拷貝到Platform Builder安裝盤下。
?
?[Passion1]測試項編號基數(shù)
?[Passion2]這里是數(shù)組名進行了宏定義,實際上就是數(shù)組名。
??? #define BEGIN_FTE FUNCTION_TABLE_ENTRY g_lpFTE[] = {
??? #define FTH(a, b) { TEXT(a), b, 0, 0, NULL },
??? #define FTE(a, b, c, d, e) { TEXT(a), b, c, d, e },
??? #define END_FTE { NULL, 0, 0, 0, NULL } };
?[Passion3]這是測試Proc所需要的一些參數(shù)
?[Passion4]這里定義了測試項的編號,可以看到基數(shù)為1000,不同的測試DLL中的測試項編號可以是一致的
?[Passion5]具體的測試函數(shù)名稱
shit,竟然不能夠把圖片搞上去,郁悶,我把文檔放到我的資源里面了,有需要的朋友可以去那里下在完整版本,或者直接給我發(fā)郵件guopeixin@126.com
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的CETK测试原理/测试方法/测试结果分析以及常见WinCE Test Kit运行问题的排查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 完成并购、即将借壳上市,威马汽车能否重获
- 下一篇: 提前祝大家十一中秋节快乐