魏萬(wàn)根,張永俊,黃志剛
(廣東工業(yè)大學(xué)機(jī)電工程學(xué)院,廣東廣州 510006)
微軟推出的嵌入式操作系統(tǒng)Windows CE 是一個(gè)基于32 位、嵌入式、多任務(wù)、實(shí)時(shí)性能好、通信能力強(qiáng)大、具有模塊化特性的操作系統(tǒng),適應(yīng)各種嵌入式系統(tǒng)和產(chǎn)品。Windows CE 的可裁剪特性與模塊化設(shè)計(jì)方式,使系統(tǒng)及應(yīng)用開發(fā)人員能夠?yàn)楦鞣N不同的產(chǎn)品來(lái)定制它。由于擁有自己的系統(tǒng)結(jié)構(gòu),具備獨(dú)立開發(fā)的內(nèi)核,因此被廣泛應(yīng)用于移動(dòng)計(jì)算設(shè)備、工業(yè)控制、車載電子、智能家電、移動(dòng)通信等領(lǐng)域,使其成為當(dāng)今嵌入式領(lǐng)域應(yīng)用最廣泛、市場(chǎng)增長(zhǎng)最快、最具發(fā)展?jié)摿Φ那度胧讲僮飨到y(tǒng)。本文基于Windows CE 嵌入式移植Windows 軟件,是滿足嵌入式應(yīng)用軟件快速增長(zhǎng)需求的一個(gè)重要途徑;而移植后的基于Windows CE 平臺(tái)的WEDM(電火花線切割)數(shù)控自動(dòng)編程系統(tǒng),將克服惡劣工業(yè)環(huán)境下控制系統(tǒng)的嚴(yán)重不足。
(1)可裁剪定制內(nèi)核
Windows CE 是為嵌入式系統(tǒng)設(shè)備(如手持移動(dòng)設(shè)備)而設(shè)計(jì)的操作系統(tǒng),一般這類設(shè)備的硬件資源有限(包括RAM、CPU 處理能力等)。這樣,用戶在定制操作系統(tǒng)時(shí),根據(jù)功能需求,在滿足設(shè)備功能要求的前提下,盡可能地只選擇必需的模塊加入操作系統(tǒng)中,不需要的模塊組件裁剪出去,最后生成的操作系統(tǒng)映像體積小,能滿足在硬件資源受限的設(shè)備上正常運(yùn)行。Windows CE 內(nèi)核的最小容量只占200 kB,如果增加圖形界面或網(wǎng)絡(luò)支持,內(nèi)核體積大概4 MB 左右。
(2)跨平臺(tái)支持
由于嵌入式設(shè)備的CPU 體系多種多樣,為了適應(yīng)Windows CE 嵌入式系統(tǒng)在異構(gòu)平臺(tái)上的正常運(yùn)行,微軟設(shè)計(jì)的Windows CE 操作系統(tǒng)支持包括x86、ARM、MIPS、SuperH 等主流的CPU 體系結(jié)構(gòu)。
(3)出色的圖形界面
Windows CE 之所以取得巨大的成功,其中一個(gè)主要原因就是具有出色的圖形交互界面,極大地方便了非專業(yè)用戶的使用,人們不再需要死記硬背大量的命令,而是能通過(guò)窗口和菜單方便的操作。
(4)良好的通信能力
Windows CE 廣泛支持各種通信硬件、局域網(wǎng)連接和撥號(hào)連接,可用于各種級(jí)別的數(shù)據(jù)傳輸和設(shè)備之間的連接。由于同為微軟公司的產(chǎn)品,因此它還提供與Windows 9x/NT/XP 的整合及通信。
(5)高效的開發(fā)工具支持
從Windows CE 6.0 開始,微軟已將Platform Builder for Windows CE 6.0 作為Microsoft Visual Studio 2005(簡(jiǎn)稱VS.NET 2005)的插件集成進(jìn)VS.NET 開發(fā)平臺(tái)中,這就將Windows CE 操作系統(tǒng)定制、驅(qū)動(dòng)程序開發(fā)、應(yīng)用程序開發(fā)全部統(tǒng)一到VS.NET 2005 環(huán)境中,使Windows CE 的系統(tǒng)開發(fā)與桌面開發(fā)共享一種開發(fā)平臺(tái)。
雖然Windows CE 系統(tǒng)屬于Windows 家族,但兩者具有不同特性,主要體現(xiàn)在:
(1)Windows CE APIs和Win32 API 的不同
與Windows 95/NT/2000/XP/Vista 的API 相比,Windows CE API 是Win32 API 的一個(gè)子集,且其中部分函數(shù)的功能已精簡(jiǎn),如對(duì)顏色和字體的支持更加有限。Windows CE APIs 相對(duì)于Win32 API 擴(kuò)展了一些特定功能,如通知(notification)和觸摸屏(touch screen)需要硬件功能的支持。此外,對(duì)異常處理也具有使用限制等。因此,桌面上正常運(yùn)行的應(yīng)用程序都不能直接在Windows CE 上運(yùn)行,開發(fā)者需通過(guò)其他辦法重新編排程序結(jié)構(gòu)和函數(shù)來(lái)實(shí)現(xiàn)這些功能。
(2)Windows CE 的MFC和標(biāo)準(zhǔn)MFC 的不同
Windows CE 不支持桌面MFC 所有類,如Windows CE 中的MFC 不支持?jǐn)?shù)據(jù)庫(kù)連接中的Data Access Object(DAO)與Open Database Connectivity(ODBC),以及Multiple-Document Interface(MDI)用戶界面、Object Linking and Embedding(OLE)和Rich Edit 控件,因此,需增加、修改和刪除一些類。新增類有CCeSocket、CCeDBEnum、CCeDBDatabase、CCeDBProp和IRecord 等類別,刪除類如CFontDialog和CPrintSetupDialog,因此,也就沒(méi)有Font Selection 對(duì)話框和Printer Setup 對(duì)話框。
(3)存儲(chǔ)器容量的不同
桌面Windows 最早擁有512 M 內(nèi)存,如今已發(fā)展到1~2 GB,但Windows CE 設(shè)備一般都配置少量的RAM、頻率較低的微處理器,且像臺(tái)式PC 上大容量的存儲(chǔ)設(shè)備和磁盤基本都沒(méi)有。Windows CE在內(nèi)存管理方面必須要比其他Windows 操作系統(tǒng)更節(jié)約物理內(nèi)存和虛擬地址空間。當(dāng)移植一個(gè)應(yīng)用程序到Windows CE 時(shí),應(yīng)著眼于頻繁使用的功能。在程序中建立全局內(nèi)存使用機(jī)制,自行監(jiān)控、管理內(nèi)存及GDI 對(duì)象,避免頻繁的內(nèi)存分配和GDI 創(chuàng)建、銷毀操作。
(4)測(cè)試和調(diào)試的不同
開發(fā)Win32 目標(biāo)系統(tǒng)應(yīng)用程序,所有的測(cè)試和調(diào)試直接在PC 上完成。但Windows CE 卻不同,如果為一個(gè)標(biāo)準(zhǔn)的Windows CE 目標(biāo)系統(tǒng)開發(fā)程序,基本上所有的開發(fā)和調(diào)試工作在開發(fā)工具提供的Windows CE 仿真環(huán)境中進(jìn)行。而如果是基于非標(biāo)準(zhǔn)的硬件平臺(tái),當(dāng)仿真環(huán)境中調(diào)試成功的程序真正運(yùn)行在目標(biāo)系統(tǒng)上時(shí),難免出現(xiàn)許多意外的故障,因此,需考慮采用另一種辦法替代虛擬的檢測(cè)環(huán)境。Windows CE API 包含了用于調(diào)試的接口(如DebugActiveProcess和DebugEvent),以此建立系統(tǒng)內(nèi)測(cè)試;或依據(jù)目標(biāo)硬件和應(yīng)用程序,使用Windows CE 的Remote API 功能進(jìn)行輔助調(diào)試。
此外,Windows CE 設(shè)備電源有限;Windows CE縮減了C/C++運(yùn)行庫(kù)(RTL);由于大部分Windows CE 設(shè)備采用觸摸屏設(shè)計(jì),沒(méi)有鼠標(biāo),人機(jī)交互方式由指示筆輕擊屏幕完成;硬件平臺(tái)是一個(gè)嵌入式系統(tǒng)存在的必要條件,是嵌入式操作系統(tǒng)運(yùn)行的基礎(chǔ),Windows CE 不像PC 那樣有標(biāo)準(zhǔn)的配置,硬件并不標(biāo)準(zhǔn)化,在嵌入式系統(tǒng)領(lǐng)域,由于設(shè)備制造商都是由不同領(lǐng)域不同的應(yīng)用廠商發(fā)展而來(lái),所以硬件結(jié)構(gòu)相對(duì)復(fù)雜、不盡相同,僅CPU 體系結(jié)構(gòu)就有多種,因此會(huì)加大程序開發(fā)的難度;Windows CE 驅(qū)動(dòng)程序有內(nèi)核和用戶2 種模式,默認(rèn)運(yùn)行在內(nèi)核模式,這有利于性能設(shè)備的提高,但也增加了影響系統(tǒng)各方面性能的不確定因素,如不穩(wěn)定的驅(qū)動(dòng)被加入到內(nèi)核,將會(huì)對(duì)嵌入式系統(tǒng)的可靠性、穩(wěn)定性等多方面性能產(chǎn)生致命的影響。
第一步:搭建應(yīng)用程序開發(fā)平臺(tái),按順序安裝軟件。
第二步:設(shè)計(jì)系統(tǒng)硬件。不同于PC 機(jī)追求容量大、功能全,嵌入式系統(tǒng)的硬件選型設(shè)計(jì),在功能符合要求的條件下,盡量去除不需要的硬件部件,以此降低開發(fā)成本和增加系統(tǒng)穩(wěn)定性。
第三步:開發(fā)BSP。BSP 是介于主板硬件和操作系統(tǒng)之間的一件軟件層,有了BSP 抽象層后,Windows CE 就能通過(guò)它間接地和硬件進(jìn)行通信,讓操作系統(tǒng)在不同體系結(jié)構(gòu)的硬件平臺(tái)上移植運(yùn)行。BSP 與特定的嵌入式操作系統(tǒng)相關(guān),并與開發(fā)板一一對(duì)應(yīng)。
第四步:定制操作系統(tǒng)模塊。
第五步:完成以上定制后,編譯形成nk.bin 或nk.nb0 文件,至此,Windows CE 的內(nèi)核定制完成。
第六步:定制與安裝SDK,聯(lián)機(jī)調(diào)試建立開發(fā)環(huán)境。
第七步:開發(fā)應(yīng)用程序,最后形成用戶程序文件.exe、.cab。
第八步:安裝并通過(guò)同步軟件ActiveSync 或網(wǎng)絡(luò)功能下載至Flash,脫機(jī)運(yùn)行。
Windows 嵌入式系統(tǒng)的開發(fā)比PC 機(jī)端開發(fā)復(fù)雜得多,因?yàn)镻C 機(jī)端開發(fā)基本上是純軟件的應(yīng)用開發(fā),而嵌入式系統(tǒng)開發(fā)既要考慮硬件平臺(tái)設(shè)計(jì),又要開發(fā)平臺(tái)上的應(yīng)用軟件以及庫(kù)函數(shù)兼容等各類問(wèn)題。
(1)當(dāng)從PC 平臺(tái)移植已有的Win32 應(yīng)用程序到Windows CE 時(shí),主要工作是找到合適的Windows CE API 來(lái)替換原有的Win32 API。如Windows CE 去掉了桌面Windows 中的一些用來(lái)向前兼容DOS和Windows 3.x 的函數(shù)。因此,移植程序往往考慮改變程序邏輯繞過(guò)這些函數(shù)或類;或是提供另一個(gè)函數(shù)或一系列函數(shù)的組合,來(lái)實(shí)現(xiàn)那個(gè)函數(shù)的功能;再者,自己編寫函數(shù)或類執(zhí)行與所缺函數(shù)和類相同的任務(wù);最后,尋找其他組織的解決方案。
(2)由于EVC 只支持單文檔的應(yīng)用程序,所以應(yīng)將多文檔程序轉(zhuǎn)換為單文檔程序,該過(guò)程主要在VC 平臺(tái)上進(jìn)行。主要步驟是:首先,查找代碼中的CMultiDoc 將其替換為CSingleDoc;其次,查找到CProjectApp 類中的InitInstance 函數(shù),將多文檔模塊改為添加單文檔模塊;最后,在頭文件和源文件中分別找到CMainFram 函數(shù),將其繼承關(guān)系改為CFrameWnd。相應(yīng)地將CMainFrame 里面頭文件內(nèi)的宏改為DECLARE_DYNCREATE(CMainFrame),同時(shí),源文件里面的宏也相應(yīng)地改為IMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd)。
(3)VC 編程使用的是ASCII 文本,而在Windows CE 系統(tǒng)環(huán)境下使用的是Unicode 碼。因此,在編譯過(guò)程中,一些輸出文本語(yǔ)句會(huì)報(bào)錯(cuò)。解決的辦法是:包含Tchar.h 文件;使用Win32 字符串函數(shù)而不是C 運(yùn)行時(shí)態(tài)庫(kù)的函數(shù);聲明中使用TCHAR、LPTSTR和其他類型;增加一個(gè)數(shù)組指針或字符計(jì)數(shù)時(shí),使用sizeof;使用TEXT 宏和_T 宏進(jìn)行字符串映射。另外,數(shù)據(jù)結(jié)構(gòu)類型的不匹配也會(huì)導(dǎo)致報(bào)錯(cuò)。
(4)用戶界面問(wèn)題。Windows CE 設(shè)備的屏幕空間較小,為了減少占用,菜單和工具欄不再設(shè)計(jì)為獨(dú)立的,而是都被包含在命令欄中。命令欄中包含了菜單、按鈕和組合框等,有效節(jié)省Windows CE 設(shè)備較小的屏幕空間,這也正是其界面的獨(dú)特所在。但命令欄沒(méi)有??抗δ?,通常被指定在屏幕的頂部。基于Windows CE MFC 的窗口創(chuàng)建函數(shù)的主要代碼為:
因此,在掌握CAWEP 功能設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、界面設(shè)計(jì)的前提下,按照以上要點(diǎn)將不符合Windows CE 運(yùn)行環(huán)境的部分進(jìn)行刪減、替換或重構(gòu),使移植后的CAWEP 在滿足圖形處理和代碼輸出兩大功能的前提下,外觀精簡(jiǎn)舒適、系統(tǒng)穩(wěn)定高效。
在定制Windows CE 操作系統(tǒng)后,安裝SDK,對(duì)于如何實(shí)現(xiàn)宿主機(jī)與目標(biāo)機(jī)同步是開發(fā)應(yīng)用程序的重要環(huán)節(jié)(圖1)?;谔烨禩Q2440 開發(fā)板為硬件平臺(tái),論述以下幾個(gè)主要步驟:
(1)安裝ActiveSync_4.1_setup.exe。
(2)啟動(dòng)Windows CE 系統(tǒng),將PC 的USB 接口與Windows CE 的USB Device 接口連接,PC 端會(huì)要求安裝USB 驅(qū)動(dòng),在網(wǎng)上下載或直接使用商家提供的驅(qū)動(dòng)程序,安裝SECBULK 文件。
(3)連接同步時(shí),需要將目標(biāo)機(jī)時(shí)間修改為宿主機(jī)當(dāng)前時(shí)。
圖1 宿主機(jī)與目標(biāo)機(jī)建立同步
在宿主機(jī)上先編寫一個(gè)程序,建立與目標(biāo)機(jī)同步后,向目標(biāo)機(jī)發(fā)送指令代碼,可看到其在目標(biāo)機(jī)上的運(yùn)行情況。主要操作過(guò)程如下:
(1)調(diào)出程序。
(2)選擇菜單“工具欄”—“連接到設(shè)備”,前提是安裝好TQ2440A_SDK。連接成功后(圖2),對(duì)話框顯示“至‘TQ2440A_SDK ARMV4I Device’連接成功”。
圖2 TQ2440A_SDK ARMV4I Device 連接成功
(3)選擇菜單“調(diào)試”—“啟動(dòng)調(diào)試”,在開發(fā)工具下端窗口顯示編譯過(guò)程。編譯成功后,生成.exe或.cab 文件后,發(fā)送至目標(biāo)機(jī)執(zhí)行程序。程序結(jié)果見(jiàn)圖3。
圖3 程序運(yùn)行結(jié)果
同步工作完成后,即可在PC 端自由設(shè)計(jì)程序,根據(jù)Windows 與Windows CE 的異同,及移植程序要素,實(shí)戰(zhàn)裝載進(jìn)目標(biāo)機(jī)測(cè)試,從而完成軟件的開發(fā)、移植。
計(jì)算機(jī)輔助線切割數(shù)控編程系統(tǒng)CAWEP 在Windows 上運(yùn)行的界面、功能模塊及結(jié)構(gòu)關(guān)系見(jiàn)圖4和圖5。移植到Windows CE 系統(tǒng)后,基本上繼承了在Windows 環(huán)境下運(yùn)行的絕大部分功能,能實(shí)現(xiàn)在設(shè)備屏幕上創(chuàng)建和編輯2D 矢量制表及模板、文件轉(zhuǎn)換、仿真加工、模擬軌跡、生成輸出B 及ISO 代碼(G 代碼),再通過(guò)使用點(diǎn)對(duì)點(diǎn)協(xié)議(PPP)和串行線路互聯(lián)協(xié)議(SLIP)進(jìn)行直接或撥號(hào)連接,傳輸代碼至解釋模塊,從而實(shí)現(xiàn)一體化控制線切割機(jī)床的加工,這種新型的加工控制方式,也將給用戶帶來(lái)全新的創(chuàng)意體驗(yàn)。CAWEP 移植后,在Windows CE上運(yùn)行的初期預(yù)想界面見(jiàn)圖6。
圖4 CAWEP 在Windows 上運(yùn)行的界面
圖5 CAWEP 系統(tǒng)功能設(shè)計(jì)
圖6 CAWEP 在Windows CE 上運(yùn)行的預(yù)想界面
工業(yè)化PC 數(shù)控系統(tǒng)由于振動(dòng)、灰塵、潮濕、高溫及其他環(huán)境影響,經(jīng)常會(huì)出現(xiàn)故障和數(shù)據(jù)丟失。而正值Windows CE 操作系統(tǒng)被嵌入式領(lǐng)域廣泛應(yīng)用的數(shù)字時(shí)代,基于該平臺(tái)應(yīng)用軟件的開發(fā)需求已成為不可抵擋的趨勢(shì)。在掌握Windows CE 與Windows 應(yīng)用程序之間的聯(lián)系和區(qū)別之后,將對(duì)Windows CE 應(yīng)用軟件的開發(fā)提供方便與科學(xué)依據(jù),Windows 程序移植到Windows CE 儼然成為加快軟件開發(fā)效率和提高軟件質(zhì)量的重要途徑?;赪indows CE 的線切割數(shù)控編程廉價(jià)微小型控制系統(tǒng),將能在工業(yè)極端環(huán)境里連續(xù)長(zhǎng)期高效穩(wěn)定地工作,具有很強(qiáng)的適應(yīng)性,克服PC 的弊端,提供統(tǒng)一的、可伸縮的解決方案,將專用硬件的耐用性與PC的靈活性結(jié)合在一起。因此,Windows CE 在工業(yè)控制領(lǐng)域有著很好的應(yīng)用前景。
[1]周振喜,戴國(guó)駿.Windows 應(yīng)用程序移植到Windows CE下的策略[J].計(jì)算機(jī)工程與設(shè)計(jì),2004(9):1560-1562.
[2]范躍華,張素芹,徐飛.基于WinCE 平臺(tái)的應(yīng)用程序移植研究[J].西安工業(yè)大學(xué)學(xué)報(bào),2007,27(1):91-94.
[3]徐陽(yáng).Windows CE 6.0 嵌入式應(yīng)用程序開發(fā)初探[J].科技廣場(chǎng),2010(12):4-9.
[4]贠汝文,祁廣云.基于VS2005 的WinCE 應(yīng)用程序開發(fā)環(huán)境研究[J].大慶師范學(xué)院學(xué)報(bào),2010,30(3):20-22.
[5]傅曦,齊宇.嵌入式系統(tǒng)Windows CE 開發(fā)技巧與實(shí)例[M].北京:化學(xué)工業(yè)出版社,2004.
[6]汪兵,李存斌,陳鵬,等.EVC 高級(jí)編程及其應(yīng)用開發(fā)[M].北京:中國(guó)水利水電出版社,2005.
[7]何宗鍵.Windows CE 嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,2006.
[8]王浩,楊正校.Windows CE 系統(tǒng)應(yīng)用開發(fā)編程[M].北京:中國(guó)水利水電出版社,2011.
[9]姜波.Windows CE.NET 程序 設(shè)計(jì)[M].北 京:機(jī)械工業(yè)出版社,2007.
[10]尹成,黃永兵,胡耀文,等.Windows CE 7 開發(fā)實(shí)戰(zhàn)詳解[M].北京:人民郵電出版社,2012.
[11]郭磊.基于ARM 的嵌入式線切割系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].南昌:南昌大學(xué),2008.
[12]黃志剛.電火花線切割計(jì)算機(jī)輔助數(shù)控編程系統(tǒng)的研究和開發(fā)[D].廣州:廣東工業(yè)大學(xué),2003.