WinCE嵌入式開發(fā)程序入門
Windows CE操作系統(tǒng)為設(shè)計提供了全新的設(shè)計環(huán)境。Windows CE的開發(fā)者幾乎不需要支持原有的應(yīng)用程序或設(shè)備,所以操作系統(tǒng)在設(shè)計時可以考慮到應(yīng)用一些最新的思想和應(yīng)用程序,并且應(yīng)用最先進(jìn)的嵌入式式的32位微處理器產(chǎn)品作為它的硬件目標(biāo)平臺。
這對于一個使用Windows CE平臺的WIN32 API的用戶來說意味著什么呢?這意味著對于現(xiàn)代的、32位的嵌入式式系統(tǒng),它是一種更簡單的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ùn)行中的程序?qū)嵗O笃渌?2位Windows 平臺一樣,Windows CE是一個多任務(wù)的操作系統(tǒng),在一個運(yùn)行中的程序里,它支持執(zhí)行多個線索所。
對于嵌入式式的應(yīng)用程序,Windows CE的多線索索執(zhí)行能力是它函數(shù)的重要的體現(xiàn)。這樣就使WIN32嵌入式式程序開發(fā)者優(yōu)先考慮WIN32的線索索的創(chuàng)立與同步。
WIN32的線索索的處理同其他常用的嵌入式式的操作系統(tǒng)是有區(qū)別的。不象Unix或其派生的系統(tǒng),32位Windows平臺從一開始設(shè)計就支持多線索索應(yīng)用程序。線索索管理(時序安排,同步和資源管理)由內(nèi)核來完成,程序開發(fā)者利用函數(shù)裝入內(nèi)核(通過WIN32 API訪問)來建立和管理他們應(yīng)用程序中的線索索。
例如,如果一個嵌入式式應(yīng)用程序必須監(jiān)視多個輸入設(shè)備并且在監(jiān)視到一個或多個設(shè)備上不同步發(fā)生的事件的時候要作出恰當(dāng)?shù)姆从场8M(jìn)一步,如果這樣一個程序也需要更新一些共享的資源(如全局?jǐn)?shù)據(jù)結(jié)構(gòu),磁盤上的文件,或其他設(shè)備)來作為與相關(guān)設(shè)備事件的反映。象這樣的一個程序需要一個可靠的線索索管理系統(tǒng)。這恰恰是WIN32 API能夠提供的函數(shù):多個線索索能夠快捷并且容易的用WIN32 API線索索創(chuàng)建界面建立;同步線索索(多個線索索同時訪問一個數(shù)據(jù))可以通過不同的方式完成,包括關(guān)鍵的段,有名稱和沒有名稱事件,以及互斥的目標(biāo)。
Windows CE 被設(shè)計成在執(zhí)行這些同步時占用最少的程序資源。這位對那些函數(shù)不強(qiáng)大的開發(fā)者來說十分重要;因為內(nèi)核來負(fù)責(zé)線索索的管理,不需要使用另外的處理器來循環(huán)檢測程序或線索索完成,以及執(zhí)行其他的無用的應(yīng)用程序?qū)哟紊系木€索索管理。內(nèi)核已構(gòu)建好如何管理若干的線索索并且使程序高效地進(jìn)行的程序。
對于包括若干個程序的應(yīng)用程序,WIN32 向用于線索索、程序管理和同步提供了一套的完備的處理方法。這些線索索管理特性非常適于嵌入式式應(yīng)用程序軟件,并且對Windows CE開發(fā)者是容易得到的。
消息
在32位windows平臺上運(yùn)行的程序更專門化,程序的線索依賴于消息來初始化程序,控制系統(tǒng)資源并且與操作系統(tǒng)和用戶通信。 windows消息有各種各樣來源 ,包括操作系統(tǒng),用戶活動諸如鍵盤輸入、鼠標(biāo)、觸到屏幕,以及其它運(yùn)行的程序或者線索。
當(dāng)消息被送到線索時,這條消息被放置在消息隊列中等待最后處理(圖3)。每一條線索擁有完全不獨(dú)立于其它線索所擁有的消息隊列的消息隊列。線索一般有不斷運(yùn)行的消息循環(huán),恢復(fù)和處理消息。當(dāng)隊列地沒有消息,并且線索不從事于其它任何活動,系統(tǒng)掛起線索,以節(jié)省中央控制器資源。
消息也能用于控制目的,初始化你的應(yīng)用程序中各種類型的程序,并且他們能利用消息參數(shù)傳遞數(shù)據(jù)。例如,線索可能收到觸屏被激活的消息,消息參數(shù)可以表明X和Y為用戶行動的坐標(biāo)。 在另一種類型的消息中,參數(shù)可以包括指針或者指向數(shù)據(jù)結(jié)構(gòu)、窗口或其他對象的句柄。
中斷處理
作為一嵌入式的的軟件開發(fā)者,你可能最關(guān)心windows CE消息的處理規(guī)則是如何影響你的外部系統(tǒng)接口的時序的。windows CE通過細(xì)心設(shè)計和準(zhǔn)確的衡量以保證其中斷時序以及其它相關(guān)的特位與嵌入式式的系統(tǒng)設(shè)計是適用的。
嵌入式應(yīng)用程序經(jīng)常有時間臨界的設(shè)備接口需要,需要發(fā)現(xiàn)并且在一最小的規(guī)定的時間之內(nèi)對設(shè)備和系統(tǒng)事件作出反應(yīng)。 為了支持這樣應(yīng)用程序, windows CE包括高度優(yōu)化中斷傳送,優(yōu)先級和服務(wù)系統(tǒng)。
在windows CE內(nèi)核中 ,中斷處理分成兩個明顯的部分:中斷服務(wù)程序(ISR )以及中斷服務(wù)線索(IST )。這個系統(tǒng)的目的是使ISR 盡可能小和快。在硬件的層次上,每一中斷要求(IRQ )線索路與一特定的軟件ISR聯(lián)系。當(dāng)被觸發(fā)時,給定的ISR除了通知內(nèi)核IST的位置外,還做少量的工作。一旦IST 被初始化(盡管沒必要完成),系統(tǒng)便準(zhǔn)備好接受下一中斷并且處理下一中斷。
每一個中斷有一個優(yōu)先級與他們相聯(lián)系。 windows CE為確定的線索時時序,利用基于優(yōu)先級的時間片段算法。與每一ISR 被聯(lián)系的IST 是正常的線索,因此為IST設(shè)置優(yōu)先級以滿足應(yīng)用程序的時序需要是應(yīng)用程序軟件開發(fā)者的責(zé)任。
這種將ISR 和IST在中斷程序中分開處理最終結(jié)果是,典型的中斷等待時間被大大地減少了,在中斷程序中發(fā)生不可接受的延遲的可能性也大大減少。此外, 嵌入式式軟件包 和windows CE內(nèi)核的特性使有可能按習(xí)慣定制中斷時序和優(yōu)先級,以滿足特定應(yīng)用程序的需要。 Windows CE和其使用的時間臨界、實時應(yīng)用程序在另一篇文章中包括比本文更詳細(xì)的內(nèi)容,文章名為《 Real-time Systems with Microsoft Windows CE》。
內(nèi)存管理
WIN32 API為向開發(fā)者提供了一套完備的和一致的接口。 當(dāng)開發(fā)絕大部分應(yīng)用程序的時候,軟件開發(fā)者不需要考慮特定內(nèi)存結(jié)構(gòu)。 然而對于許多嵌入式應(yīng)用程序,特別是那些有嚴(yán)格的內(nèi)存資源約束或者臨界時序的要求的,對內(nèi)存被管理的方法有好的理解是重要的。
Windows的內(nèi)存的一般結(jié)構(gòu)對于不同的32 位Windows平臺是不同的,并且特殊的細(xì)節(jié)結(jié)構(gòu)在同一32 位Windows操作系統(tǒng)下不同的處理機(jī)之間也不同。 (例如,Windows NT的內(nèi)存結(jié)構(gòu)在X86 平臺上與在DEC Alpha 平臺上的用法十分不同 。) 對于這段的討論,我們將專門集中在Windows CE操作系統(tǒng)的部分中進(jìn)行。
Windows CE的存儲結(jié)構(gòu)
像其它的32 位Windows平臺一樣,Windows CE操作系統(tǒng)也有虛擬內(nèi)存的特性。內(nèi)存總在某一時間被分配給應(yīng)用程序一頁,頁的大小由系統(tǒng)設(shè)計者決定(并在操作系統(tǒng)為目標(biāo)硬件平臺創(chuàng)建時被指定)。例如 在手持電腦,內(nèi)存頁大小是典型的1KB 或者4KB 。
評論