新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > WinCE嵌入式開(kāi)發(fā)程序入門(mén)

WinCE嵌入式開(kāi)發(fā)程序入門(mén)

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

Windows CE操作系統(tǒng)為設(shè)計(jì)提供了全新的設(shè)計(jì)環(huán)境。Windows CE的開(kāi)發(fā)者幾乎不需要支持原有的應(yīng)用程序或設(shè)備,所以操作系統(tǒng)在設(shè)計(jì)時(shí)可以考慮到應(yīng)用一些最新的思想和應(yīng)用程序,并且應(yīng)用最先進(jìn)的嵌入式式的32位微處理器產(chǎn)品作為它的硬件目標(biāo)平臺(tái)。

這對(duì)于一個(gè)使用Windows CE平臺(tái)的WIN32 API的用戶(hù)來(lái)說(shuō)意味著什么呢?這意味著對(duì)于現(xiàn)代的、32位的嵌入式式系統(tǒng),它是一種更簡(jiǎn)單的API,更加優(yōu)化的目標(biāo)操作系統(tǒng)。下面,我們將研究一些重要 的WIN32 API和Windows CE操作系統(tǒng)的內(nèi)部的內(nèi)容。

程序和線(xiàn)索

了解WIN32 API和Windows CE操作系統(tǒng)的底層內(nèi)容的第一步就是了解多任務(wù)和多線(xiàn)索索應(yīng)用程序是如何組織的。WIN32術(shù)語(yǔ)中,程序被定義成一個(gè)正在運(yùn)行中的程序?qū)嵗?。象其他?2位Windows 平臺(tái)一樣,Windows CE是一個(gè)多任務(wù)的操作系統(tǒng),在一個(gè)運(yùn)行中的程序里,它支持執(zhí)行多個(gè)線(xiàn)索所。

對(duì)于嵌入式式的應(yīng)用程序,Windows CE的多線(xiàn)索索執(zhí)行能力是它函數(shù)的重要的體現(xiàn)。這樣就使WIN32嵌入式式程序開(kāi)發(fā)者優(yōu)先考慮WIN32的線(xiàn)索索的創(chuàng)立與同步。

WIN32的線(xiàn)索索的處理同其他常用的嵌入式式的操作系統(tǒng)是有區(qū)別的。不象Unix或其派生的系統(tǒng),32位Windows平臺(tái)從一開(kāi)始設(shè)計(jì)就支持多線(xiàn)索索應(yīng)用程序。線(xiàn)索索管理(時(shí)序安排,同步和資源管理)由內(nèi)核來(lái)完成,程序開(kāi)發(fā)者利用函數(shù)裝入內(nèi)核(通過(guò)WIN32 API訪(fǎng)問(wèn))來(lái)建立和管理他們應(yīng)用程序中的線(xiàn)索索。

例如,如果一個(gè)嵌入式式應(yīng)用程序必須監(jiān)視多個(gè)輸入設(shè)備并且在監(jiān)視到一個(gè)或多個(gè)設(shè)備上不同步發(fā)生的事件的時(shí)候要作出恰當(dāng)?shù)姆从?。更進(jìn)一步,如果這樣一個(gè)程序也需要更新一些共享的資源(如全局?jǐn)?shù)據(jù)結(jié)構(gòu),磁盤(pán)上的文件,或其他設(shè)備)來(lái)作為與相關(guān)設(shè)備事件的反映。象這樣的一個(gè)程序需要一個(gè)可靠的線(xiàn)索索管理系統(tǒng)。這恰恰是WIN32 API能夠提供的函數(shù):多個(gè)線(xiàn)索索能夠快捷并且容易的用WIN32 API線(xiàn)索索創(chuàng)建界面建立;同步線(xiàn)索索(多個(gè)線(xiàn)索索同時(shí)訪(fǎng)問(wèn)一個(gè)數(shù)據(jù))可以通過(guò)不同的方式完成,包括關(guān)鍵的段,有名稱(chēng)和沒(méi)有名稱(chēng)事件,以及互斥的目標(biāo)。

Windows CE 被設(shè)計(jì)成在執(zhí)行這些同步時(shí)占用最少的程序資源。這位對(duì)那些函數(shù)不強(qiáng)大的開(kāi)發(fā)者來(lái)說(shuō)十分重要;因?yàn)閮?nèi)核來(lái)負(fù)責(zé)線(xiàn)索索的管理,不需要使用另外的處理器來(lái)循環(huán)檢測(cè)程序或線(xiàn)索索完成,以及執(zhí)行其他的無(wú)用的應(yīng)用程序?qū)哟紊系木€(xiàn)索索管理。內(nèi)核已構(gòu)建好如何管理若干的線(xiàn)索索并且使程序高效地進(jìn)行的程序。

對(duì)于包括若干個(gè)程序的應(yīng)用程序,WIN32 向用于線(xiàn)索索、程序管理和同步提供了一套的完備的處理方法。這些線(xiàn)索索管理特性非常適于嵌入式式應(yīng)用程序軟件,并且對(duì)Windows CE開(kāi)發(fā)者是容易得到的。

消息

在32位windows平臺(tái)上運(yùn)行的程序更專(zhuān)門(mén)化,程序的線(xiàn)索依賴(lài)于消息來(lái)初始化程序,控制系統(tǒng)資源并且與操作系統(tǒng)和用戶(hù)通信。 windows消息有各種各樣來(lái)源 ,包括操作系統(tǒng),用戶(hù)活動(dòng)諸如鍵盤(pán)輸入、鼠標(biāo)、觸到屏幕,以及其它運(yùn)行的程序或者線(xiàn)索。

當(dāng)消息被送到線(xiàn)索時(shí),這條消息被放置在消息隊(duì)列中等待最后處理(圖3)。每一條線(xiàn)索擁有完全不獨(dú)立于其它線(xiàn)索所擁有的消息隊(duì)列的消息隊(duì)列。線(xiàn)索一般有不斷運(yùn)行的消息循環(huán),恢復(fù)和處理消息。當(dāng)隊(duì)列地沒(méi)有消息,并且線(xiàn)索不從事于其它任何活動(dòng),系統(tǒng)掛起線(xiàn)索,以節(jié)省中央控制器資源。

消息也能用于控制目的,初始化你的應(yīng)用程序中各種類(lèi)型的程序,并且他們能利用消息參數(shù)傳遞數(shù)據(jù)。例如,線(xiàn)索可能收到觸屏被激活的消息,消息參數(shù)可以表明X和Y為用戶(hù)行動(dòng)的坐標(biāo)。 在另一種類(lèi)型的消息中,參數(shù)可以包括指針或者指向數(shù)據(jù)結(jié)構(gòu)、窗口或其他對(duì)象的句柄。

中斷處理

作為一嵌入式的的軟件開(kāi)發(fā)者,你可能最關(guān)心windows CE消息的處理規(guī)則是如何影響你的外部系統(tǒng)接口的時(shí)序的。windows CE通過(guò)細(xì)心設(shè)計(jì)和準(zhǔn)確的衡量以保證其中斷時(shí)序以及其它相關(guān)的特位與嵌入式式的系統(tǒng)設(shè)計(jì)是適用的。

嵌入式應(yīng)用程序經(jīng)常有時(shí)間臨界的設(shè)備接口需要,需要發(fā)現(xiàn)并且在一最小的規(guī)定的時(shí)間之內(nèi)對(duì)設(shè)備和系統(tǒng)事件作出反應(yīng)。 為了支持這樣應(yīng)用程序, windows CE包括高度優(yōu)化中斷傳送,優(yōu)先級(jí)和服務(wù)系統(tǒng)。

在windows CE內(nèi)核中 ,中斷處理分成兩個(gè)明顯的部分:中斷服務(wù)程序(ISR )以及中斷服務(wù)線(xiàn)索(IST )。這個(gè)系統(tǒng)的目的是使ISR 盡可能小和快。在硬件的層次上,每一中斷要求(IRQ )線(xiàn)索路與一特定的軟件ISR聯(lián)系。當(dāng)被觸發(fā)時(shí),給定的ISR除了通知內(nèi)核IST的位置外,還做少量的工作。一旦IST 被初始化(盡管沒(méi)必要完成),系統(tǒng)便準(zhǔn)備好接受下一中斷并且處理下一中斷。

每一個(gè)中斷有一個(gè)優(yōu)先級(jí)與他們相聯(lián)系。 windows CE為確定的線(xiàn)索時(shí)時(shí)序,利用基于優(yōu)先級(jí)的時(shí)間片段算法。與每一ISR 被聯(lián)系的IST 是正常的線(xiàn)索,因此為IST設(shè)置優(yōu)先級(jí)以滿(mǎn)足應(yīng)用程序的時(shí)序需要是應(yīng)用程序軟件開(kāi)發(fā)者的責(zé)任。

這種將ISR 和IST在中斷程序中分開(kāi)處理最終結(jié)果是,典型的中斷等待時(shí)間被大大地減少了,在中斷程序中發(fā)生不可接受的延遲的可能性也大大減少。此外, 嵌入式式軟件包 和windows CE內(nèi)核的特性使有可能按習(xí)慣定制中斷時(shí)序和優(yōu)先級(jí),以滿(mǎn)足特定應(yīng)用程序的需要。 Windows CE和其使用的時(shí)間臨界、實(shí)時(shí)應(yīng)用程序在另一篇文章中包括比本文更詳細(xì)的內(nèi)容,文章名為《 Real-time Systems with Microsoft Windows CE》。

內(nèi)存管理

WIN32 API為向開(kāi)發(fā)者提供了一套完備的和一致的接口。 當(dāng)開(kāi)發(fā)絕大部分應(yīng)用程序的時(shí)候,軟件開(kāi)發(fā)者不需要考慮特定內(nèi)存結(jié)構(gòu)。 然而對(duì)于許多嵌入式應(yīng)用程序,特別是那些有嚴(yán)格的內(nèi)存資源約束或者臨界時(shí)序的要求的,對(duì)內(nèi)存被管理的方法有好的理解是重要的。

Windows的內(nèi)存的一般結(jié)構(gòu)對(duì)于不同的32 位Windows平臺(tái)是不同的,并且特殊的細(xì)節(jié)結(jié)構(gòu)在同一32 位Windows操作系統(tǒng)下不同的處理機(jī)之間也不同。 (例如,Windows NT的內(nèi)存結(jié)構(gòu)在X86 平臺(tái)上與在DEC Alpha 平臺(tái)上的用法十分不同 。) 對(duì)于這段的討論,我們將專(zhuān)門(mén)集中在Windows CE操作系統(tǒng)的部分中進(jìn)行。

Windows CE的存儲(chǔ)結(jié)構(gòu)

像其它的32 位Windows平臺(tái)一樣,Windows CE操作系統(tǒng)也有虛擬內(nèi)存的特性。內(nèi)存總在某一時(shí)間被分配給應(yīng)用程序一頁(yè),頁(yè)的大小由系統(tǒng)設(shè)計(jì)者決定(并在操作系統(tǒng)為目標(biāo)硬件平臺(tái)創(chuàng)建時(shí)被指定)。例如 在手持電腦,內(nèi)存頁(yè)大小是典型的1KB 或者4KB 。



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉