基于CE的嵌入式軟件開(kāi)發(fā)程序入門(mén)(上)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
說(shuō)到Windows CE不由得就想到微軟推出的WIN系列PC操作系統(tǒng),Windows的出現(xiàn)在很大程度上改變了程序員的編程習(xí)慣,把程序員從冗長(zhǎng)的代碼中解放了出來(lái)。那么Windows CE呢?會(huì)不會(huì)給掌上電腦的程序設(shè)計(jì)帶來(lái)一次新的飛躍呢?一切沒(méi)有事實(shí)依據(jù)的預(yù)測(cè)都是不可靠的,我們只能通過(guò)認(rèn)識(shí)WIN CE的優(yōu)勢(shì)與特點(diǎn)來(lái)小心翼翼的展望一下也許并不遙遠(yuǎn)的未來(lái)。 CE能被廣泛的應(yīng)用到各種嵌入式的產(chǎn)品中與其是一個(gè)緊湊、高效和可升級(jí)的操作系統(tǒng)有著直接的關(guān)系。從手持電腦到專(zhuān)門(mén)的工業(yè)控制器和消費(fèi)用電子產(chǎn)品隨處可見(jiàn)CE的靚影。Windows CE已經(jīng)通過(guò)了其自身的能力證明:它能夠滿足32位嵌入式式程序開(kāi)發(fā)的需求。同樣重要的是: Windows CE使嵌入式式系統(tǒng)的設(shè)計(jì)者得以充分利用Microsoft的32位基于Windows的開(kāi)發(fā)工具的全部的函數(shù)---API。
本文并不是刻意要完全做Win32的編程指南,而是要介紹用Win32作為嵌入式式應(yīng)用程序的開(kāi)發(fā)工具。
回答一個(gè)問(wèn)題先:什么是WIN32?
“WIN32”表示對(duì)于所有的Microsoft 32位平臺(tái)的一種普通的應(yīng)用編程接口(API)。這些平臺(tái)通常指: Windows 95, Windows 98, Windows NT, Windows CE。 本文我們主要關(guān)注Windows CE操作系統(tǒng),可是需要弄清楚的是大多數(shù) Win32的應(yīng)用編程接口對(duì)上面幾種平臺(tái)都適用。不過(guò)不同的平臺(tái)由于不同的特性及硬件的約束,其應(yīng)用編程接口也不完全相同。WIN32平臺(tái)家族的一些成員支持全部的WIN32的應(yīng)用編程接口(下簡(jiǎn)稱API),而的只支持一部分的API。 為緊湊的、嵌入式的應(yīng)用軟件和小型設(shè)備而設(shè)計(jì)的Windows CE受WIN32的API限制最多。話雖如此, Windows CE 的API也足夠的完善,處理實(shí)際的大量的高級(jí)的嵌入式式應(yīng)用程序也沒(méi)什么問(wèn)題。
概念性的飛躍:WIN32與Microsoft基本類(lèi)庫(kù)(MFC)
用WIN32界面設(shè)計(jì)并不是創(chuàng)建32位基于 Windows的應(yīng)用程序的唯一的途徑。另一種重要的途徑是可在WIN32與 Microsoft Visual C++開(kāi)發(fā)環(huán)境使用的Microsoft基本類(lèi)庫(kù)(MFC)。MFC為許多(不是所有)的WIN32的API進(jìn)行了高度的封裝。通常,MFC提供了代表重要的WINDOWS的用戶界面對(duì)象的類(lèi),象窗口,對(duì)話框,畫(huà)刷,畫(huà)筆,和字體。MFC也為沒(méi)有任何用戶界面要求的嵌入式式應(yīng)用軟件提供了相應(yīng)的類(lèi)。MFC類(lèi)的成員函數(shù)調(diào)用WIN32API的函數(shù),可以使復(fù)雜的應(yīng)用程序的設(shè)計(jì)巧妙的簡(jiǎn)化。
作為WIN32的程序員,你可以自由的選取使用C或C++和WIN32 API, 或者用C++與MFC。VISUAL C++開(kāi)發(fā)系統(tǒng)對(duì)于所有的,包括 Windows CE 的WIN32的目標(biāo)操作系統(tǒng)都支持以上的兩種開(kāi)發(fā)系統(tǒng)。
再說(shuō)點(diǎn)廢話:Windows CE的內(nèi)核和 Win32 API
WINDOWS CE很容易讓人產(chǎn)生這樣一個(gè)錯(cuò)覺(jué),認(rèn)為它僅僅是現(xiàn)有的操作系統(tǒng)(如/98/NT)降級(jí)版。但事實(shí)上Windows CE是以小型的、高度用戶化的面向嵌入式應(yīng)用程序的操作系統(tǒng)開(kāi)發(fā)起來(lái)的。在WINDOWS CE排除(或代替)了一些基于WINDOWS CE的應(yīng)用軟件所不需要的操作系統(tǒng)特性的同時(shí),它的內(nèi)核也具有大量的Microsoft 32位的操作系統(tǒng)的最精華的東西。例如在Windows NT下, 所有的在Windows CE下運(yùn)行所應(yīng)用軟件都運(yùn)行在有優(yōu)先權(quán)的多任務(wù)處理環(huán)境下,在被全保護(hù)的內(nèi)存空間里。還有,象 Windows NT一樣,Windows CE支持本地統(tǒng)一的字符編碼標(biāo)準(zhǔn)碼字符串,使它更適于國(guó)際推廣??墒牵幌蟮?2位WINDOWS平臺(tái),, Windows CE是十分緊湊和用戶化的,僅僅占用小于的內(nèi)存。
Windows CE的WIN32 API比其他的32位的Windows操作系統(tǒng)的WIN32 API要??;它只包括大約相當(dāng)于Windows NT的半數(shù)的API。但是 Windows CE的WIN32 API也有其他系統(tǒng)所沒(méi)有的特性。例如:通知API,它能夠操作系統(tǒng)的層次,而不是在應(yīng)用程序的層次上處理通知事件(如時(shí)鐘)。觸屏的API和對(duì)Windows CE的數(shù)據(jù)庫(kù)的內(nèi)置的支持是其他的操作系統(tǒng)所沒(méi)有的。觸屏的API使用于觸覺(jué)敏感顯示器的屏幕校正和用戶交互的管理容易實(shí)現(xiàn),而數(shù)據(jù)庫(kù)的API提供了快速簡(jiǎn)捷的訪問(wèn)數(shù)據(jù)庫(kù)的的一常用工具。另一個(gè)關(guān)于Windows CE的鮮為人知的方面是它的高度的模塊化;嵌入式系統(tǒng)開(kāi)發(fā)者(用Microsoft Windows CE內(nèi)含的面向Visual C++的軟件包)能夠創(chuàng)建一個(gè)相當(dāng)對(duì)于它們的獨(dú)特的硬件平臺(tái)和應(yīng)用軟件用戶化了的Windows CE的版本。這對(duì)于一個(gè)使用Windows CE平臺(tái)的WIN32 API的用戶來(lái)就意味著對(duì)于的、32位的嵌入式式系統(tǒng),它是一種更簡(jiǎn)單的API,更加優(yōu)化的目標(biāo)操作系統(tǒng)。下面,我們將研究一些重要 的WIN32 API和Windows CE操作系統(tǒng)的內(nèi)部的內(nèi)容。
言歸正傳:程序和線程
了解WIN32 API和Windows CE操作系統(tǒng)的底層內(nèi)容的第一步就是了解多任務(wù)和多線程應(yīng)用程序是如何組織的。WIN32術(shù)語(yǔ)中,程序被定義成一個(gè)正在運(yùn)行中的進(jìn)程實(shí)例。象其他的32位Windows 平臺(tái)一樣,Windows CE是一個(gè)多任務(wù)的操作系統(tǒng),在一個(gè)運(yùn)行中的程序里,它支持執(zhí)行多個(gè)線程在后臺(tái)運(yùn)行。
WIN32的線程的處理同其他常用的嵌入式的操作系統(tǒng)是有區(qū)別的。不象或其派生的系統(tǒng),32位Windows平臺(tái)從一開(kāi)始設(shè)計(jì)就支持多線程應(yīng)用程序。線程管理(時(shí)序安排,同步和資源管理)由內(nèi)核來(lái)完成,程序開(kāi)發(fā)者利用函數(shù)裝入內(nèi)核(通過(guò)WIN32 API訪問(wèn))來(lái)建立和管理他們應(yīng)用程序中的線索索。
例如,如果一個(gè)嵌入式應(yīng)用程序必須監(jiān)視多個(gè)輸入設(shè)備并且在監(jiān)視到一個(gè)或多個(gè)設(shè)備上不同步發(fā)生的事件的時(shí)候要作出恰當(dāng)?shù)姆从场8M(jìn)一步,如果這樣一個(gè)程序也需要更新一些共享的資源(如全局?jǐn)?shù)據(jù)結(jié)構(gòu),磁盤(pán)上的文件,或其他設(shè)備)來(lái)作為與相關(guān)設(shè)備事件的反映。象這樣的一個(gè)程序需要一個(gè)可靠的線程管理系統(tǒng)。這恰恰是WIN32 API能夠提供的函數(shù)。多個(gè)線程能夠快捷并且容易的用WIN32 API線程創(chuàng)建界面,建立同步線程。(多個(gè)線程同時(shí)訪問(wèn)一個(gè)數(shù)據(jù))這些可以通過(guò)關(guān)鍵的段,有名稱和沒(méi)有名稱事件,以及互斥的目標(biāo)來(lái)實(shí)現(xiàn)。Windows CE 被設(shè)計(jì)成在執(zhí)行這些同步時(shí)僅占用最少的程序資源。
一個(gè)新的名詞:消息
在32位windows平臺(tái)上運(yùn)行的程序更專(zhuān)門(mén)化,程序的線程依賴于消息來(lái)初始化程序,控制系統(tǒng)資源并且與操作系統(tǒng)和用戶通信。 windows消息有各種各樣來(lái)源 ,包括操作系統(tǒng),用戶活動(dòng)諸如鍵盤(pán)輸入、、觸到屏幕,以及其它運(yùn)行的程序或者線程。
當(dāng)消息被送到線程時(shí),這條消息被放置在消息隊(duì)列中等待最后處理。每一條線程擁有完全獨(dú)立的消息隊(duì)列。線程一般有不斷運(yùn)行的消息循環(huán),恢復(fù)和處理消息。當(dāng)隊(duì)列地沒(méi)有消息,并且線程不從事于其它任何活動(dòng),系統(tǒng)掛起線程,以節(jié)省中央控制器資源。
消息也能用于控制目的,初始化你的應(yīng)用程序中各種類(lèi)型的程序,并且他們能利用消息參數(shù)傳遞數(shù)據(jù)。例如,線程可能收到觸屏被激活的消息,消息參數(shù)可以表明X和Y為用戶行動(dòng)的坐標(biāo)。 在另一種類(lèi)型的消息中,參數(shù)可以包括指針或者指向數(shù)據(jù)結(jié)構(gòu)、窗口或其他對(duì)象的句柄。