當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] MicrosoftWindows CE是緊湊的、高效的和可升級的操作系統(tǒng),它被廣泛的應(yīng)用在各種嵌入式式的產(chǎn)品中,從手持電腦到專門的工業(yè)控制器和消費用電子產(chǎn)品中。Windows CE已經(jīng)通

 MicrosoftWindows CE是緊湊的、高效的和可升級的操作系統(tǒng),它被廣泛的應(yīng)用在各種嵌入式式的產(chǎn)品中,從手持電腦到專門的工業(yè)控制器和消費用電子產(chǎn)品中。Windows CE已經(jīng)通過了其自身的能力證明:它能夠滿足32位嵌入式式程序開發(fā)的需求。 同樣重要的是: Windows CE使嵌入式式系統(tǒng)的設(shè)計者得以充分利用Microsoft的32位基于Windows的開發(fā)工具的全部的函數(shù)。

嵌入式的應(yīng)用軟件選擇Windows CE的首要原因之一是Microsoft Win32應(yīng)用編程接口(API)的廣泛應(yīng)用。從運行在Microsoft WindowsNT操作系統(tǒng)下的高端服務(wù)器到最小的臺式機和內(nèi)嵌式的應(yīng)用中,WIN32 API幾乎是所有為面向Windows開發(fā)32位應(yīng)用軟件的內(nèi)核。

本文的目的是向那些開發(fā)基于Windows CE的新的嵌入式式系統(tǒng)的開發(fā)者介紹WIN32 事件驅(qū)動編寫程序。 本文將:

概述32位Windows操作系統(tǒng)和WIN32編程模型。

介紹線程,事件和消息是如何操作的。

給出Win32如何管理Windows CE的內(nèi)存。

解釋 Win32意外操作的概念。

比較同步和不同步設(shè)備的界面的不同的方法。

總結(jié)明確定義的API的優(yōu)位。

本文并不是刻意要完全做Win32的編程指南,而是要介紹用Win32作為嵌入式式應(yīng)用程序的開發(fā)工具。

簡介

對于全世界的成千上萬的程序開發(fā)者來說,Win32程序模式很常見。WIN32是臺式機或企業(yè)廣泛應(yīng)用的強大目標(biāo),而且隨著Windows CE的涌現(xiàn),它也成了嵌入式式系統(tǒng)的理想的程序界面形式。WIN32為Windows CE操作系統(tǒng)提供了一致的,文檔完備的并且函數(shù)強大的程序界面。

用WIN32在Windows CE平臺開發(fā)的程序同其他的WIN32程序差不多;這意味著程序開發(fā)者在開發(fā)新的面向Windows CE操作系統(tǒng)的應(yīng)用程序的時候,能夠應(yīng)用這些大量的WIN32的程序資源、第三代工具和外部的專門的技術(shù)。具有WIN32編程經(jīng)驗的程序員會發(fā)現(xiàn)創(chuàng)建新的(維護(hù)已有的)面向Windows CE設(shè)備(如手持電腦)的應(yīng)用程序遠(yuǎn)比創(chuàng)建類似的面向特殊的平臺或其他應(yīng)用不廣的嵌入式式的操作系統(tǒng)的應(yīng)用程序簡單。

嵌入式式系統(tǒng)的設(shè)計者們很快意識到Windows CE的強大,并且以驚人的快速使這個操作系統(tǒng)與它們的新產(chǎn)品一體化??墒牵S多嵌入式式軟件的開發(fā)者對Windows的事件驅(qū)動程序的一般技術(shù)不熟悉。對于這些軟件開發(fā)者來說,在他們開始他們第一次的基于Windows CE的項目之前,了解一些WIN32的基礎(chǔ)的知識是有好處的。

什么是WIN32?

“WIN32”表示對于所有的Microsoft 32位平臺的一種普通的應(yīng)用編程接口(API)。這些平臺通常指:

Windows 95, Windows 98

Windows NT

Windows CE

本文我們主要關(guān)注Windows CE操作系統(tǒng),可是需要弄清楚的是大多數(shù) Win32的應(yīng)用編程接口對上面所有三種平臺都適用。這種同用的應(yīng)用編程接口的優(yōu)位有很多:容易登錄到應(yīng)用程序中,有大量的已有程序的知識,范例和第三代軟件的資源。

平臺的差別

WIN32的應(yīng)用編程接口定義了你作為一個程序員有用的Windows平臺。WIN32應(yīng)用編程接口的目的是提供了一個常用的界面的設(shè)置,可是虛擬,不同的平臺由于不同的特性及硬件的約束,其應(yīng)用編程接口也不同。WIN32平臺家族的一些成員支持全部的WIN32的應(yīng)用編程接口(下簡稱API),而其他的只支持一部分的API。 為緊湊的、嵌入式式的應(yīng)用軟件和小型設(shè)備而設(shè)計的Windows CE,WIN32的API最受限制。盡管如此, Windows CE 的API也是足夠完善的,能夠處理實際的大量的高級的嵌入式式應(yīng)用程序。

WIN32與Microsoft基本類庫(MFC)

用WIN32界面設(shè)計并不是創(chuàng)建32位基于 Windows的應(yīng)用程序的唯一的途徑。另一種重要的途徑是可在WIN32與 Microsoft Visual C++開發(fā)環(huán)境使用的Microsoft基本類庫(MFC)。MFC為許多(不是所有)的WIN32的API進(jìn)行了高度的封裝(圖1)。 通常,MFC提供了代表重要的WINDOWS的用戶界面對象的類,象窗口,對話框,畫刷,畫筆,和字體。MFC也為沒有任何用戶界面要求的嵌入式式應(yīng)用軟件提供了相應(yīng)的類。MFC類的成員函數(shù)調(diào)用WIN32API的函數(shù),可以使復(fù)雜的應(yīng)用程序的設(shè)計巧妙的簡化。

作為WIN32的程序員,你可以自由的選取使用C或C++和WIN32 API, 或者用C++與MFC。VISUAL C++開發(fā)系統(tǒng)對于所有的,包括 Windows CE 的WIN32的目標(biāo)操作系統(tǒng)都支持以上的兩種開發(fā)系統(tǒng)。

本文直接介紹WIN32 API。應(yīng)用 Windows CE下的MFC的詳細(xì)的消息,參閱 Windows CE SDK文檔。

WIN32程序模型

WIN32是超越所有32位WINDOWS平臺的常用和一致的(盡管并不全部相同)API。為了對WIN32 API有一個透徹的了解,以便高效的使用它的函數(shù),了解一些底層操作系統(tǒng)的基礎(chǔ)十分重要。本節(jié)總結(jié)了32位操作系統(tǒng)和 Win32 API的最重要的概念,為你更深入的學(xué)習(xí)提供基礎(chǔ)。要得到更多更詳細(xì)的關(guān)于32位WINDOWS的體系結(jié)構(gòu)、 Win32 API、以及其他的程序設(shè)計的主題,你可以讀一本關(guān)于那個主題出版的書。Microsoft出版社能提供一些這樣的書籍;在本文的最后,列著部分這些書的條目。

Windows CE的內(nèi)核和 Win32 API

那些對WINDOWS CE的人可能會有一個錯覺,認(rèn)為它僅僅是現(xiàn)有的操作系統(tǒng)(如WINDOWS95)降級版。但事實上Windows CE是以小型的、高度用戶化的面向嵌入式式應(yīng)用程序的操作系統(tǒng)開發(fā)起來的。在WINDOWS CE排除(或代替)了一些基于WINDOWS CE的應(yīng)用軟件所不需要的操作系統(tǒng)特性的同時,它的內(nèi)核也具有大量的其他Microsoft 32位的操作系統(tǒng)的最精華的東西。例如在Windows NT下, 所有的在Windows CE下運行所應(yīng)用軟件都運行在有優(yōu)先權(quán)的多任務(wù)處理環(huán)境下,在被全保護(hù)的內(nèi)存空間里。還有,象 Windows NT一樣,Windows CE支持本地統(tǒng)一的字符編碼標(biāo)準(zhǔn)碼字符串,使它更適于國際推廣??墒?,不象其他的32位WINDOWS平臺,, Windows CE是十分緊湊和用戶化的,僅僅占用小于200K的內(nèi)存。

Windows CE的WIN32 API比其他的32位的Windows操作系統(tǒng)的WIN32 API要小;它只包括大約相當(dāng)于Windows NT的半數(shù)的API。但是 Windows CE的WIN32 API也有其他系統(tǒng)所沒有的特性。例如:通知API,它能夠操作系統(tǒng)的層次,而不是在運行的應(yīng)用程序的層次上處理通知事件(如時鐘)。觸屏的API和對Windows CE的數(shù)據(jù)庫的內(nèi)置的支持是其他的操作系統(tǒng)所沒有的。觸屏的API使用于觸覺敏感顯示器的屏幕校正和用戶交互的管理容易實現(xiàn),而數(shù)據(jù)庫的API提供了快速簡捷的訪問緊湊的、一般用途的數(shù)據(jù)庫的工具。另一個關(guān)于Windows CE的鮮為人知的方面是它的高度的模塊化;嵌入式式系統(tǒng)開發(fā)者(用Microsoft Windows CE內(nèi)含的面向Visual C++的軟件包)能夠創(chuàng)建一個對于它們的獨特的硬件平臺和應(yīng)用軟件用戶化了的Windows CE的版本。[!--empirenews.page--]

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ù)語中,程序被定義成一個正在運行中的程序?qū)嵗?。象其他?2位Windows 平臺一樣,Windows CE是一個多任務(wù)的操作系統(tǒng),在一個運行中的程序里,它支持執(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ù)姆从?。更進(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ù)不強大的開發(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平臺上運行的程序更專門化,程序的線索依賴于消息來初始化程序,控制系統(tǒng)資源并且與操作系統(tǒng)和用戶通信。 windows消息有各種各樣來源 ,包括操作系統(tǒng),用戶活動諸如鍵盤輸入、鼠標(biāo)、觸到屏幕,以及其它運行的程序或者線索。

當(dāng)消息被送到線索時,這條消息被放置在消息隊列中等待最后處理(圖3)。每一條線索擁有完全不獨立于其它線索所擁有的消息隊列的消息隊列。線索一般有不斷運行的消息循環(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)下不同的處理機之間也不同。 (例如,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 。[!--empirenews.page--]

在初始化期間(導(dǎo)入),Windows CE創(chuàng)造一個獨立的被所有程序共享的4GB 虛擬地址空間。當(dāng)程序引用一個虛擬的地址時,它被內(nèi)核記錄在物理的內(nèi)存上。 這使得應(yīng)用程序軟件開發(fā)者不必去考慮目標(biāo)系統(tǒng)內(nèi)存的物理的布局。雖然所有程序共享單一地址空間,應(yīng)用程序仍然可避免相互誤用。Windows CE 通過改變每頁的保護(hù)來保護(hù)程序內(nèi)存,而不是分配給每一程序不同地址空間。 作為應(yīng)用程序開發(fā)者,你可能不會太在乎目標(biāo)系統(tǒng)的內(nèi)存的物理的結(jié)構(gòu)。 內(nèi)存可以全部是隨機存取內(nèi)存,或者它可能包括閃存卡或者硬盤驅(qū)動器。Windows CE操作系統(tǒng)為你管理內(nèi)存資源,同時WIN32 API 向你提供必要的分配、使用和釋放的內(nèi)存的接口。

然而,作為一個嵌入式的系統(tǒng)的設(shè)計者,你將需要細(xì)心考慮將在你新的硬件平臺上執(zhí)行的應(yīng)用程序的內(nèi)存需要,并且全面考慮成本、速度和可靠性,平衡各種目標(biāo)的沖突。 如果你為使用Windows CE開發(fā)一個新的硬件平臺 ,Windows CE的面向Visual C++ 的嵌入式軟件包包括資源可以幫助你做出這些決策,并且從而構(gòu)成操作系統(tǒng)。

無論你的系統(tǒng)內(nèi)存的配置如何,ROM(只讀內(nèi)存)將占用十分重要的地位。不同于其它的32位Windows操作系統(tǒng),Windows CE操作系統(tǒng)的代碼在只讀內(nèi)存中,并且在那個只讀內(nèi)存中原地執(zhí)行。 依據(jù)你的產(chǎn)品需要,你也能選擇在只讀內(nèi)存中放置應(yīng)用程序代碼。 例如,Pocket Word,Pocket Excel和其它應(yīng)用程序程序,包括在手持電腦只讀內(nèi)存中被提供的。

存儲在ROM中的程序組在Windows CE下當(dāng)?shù)貓?zhí)行,所以嵌入式系統(tǒng)的設(shè)計者能夠只占用很少的RAM用于堆棧存儲的需要。相應(yīng)地,你的嵌入式應(yīng)用程序可以利用RAM既作為程序的內(nèi)存又可作臨時存儲空間。

為了進(jìn)一步的增加應(yīng)用程序軟件的性能, Windows CE采用按需求將內(nèi)存分葉;操作系統(tǒng)僅僅需要解壓縮并且裝入基于RAM的一小部分程序準(zhǔn)備執(zhí)行。ROM和 基于RAM的程序的靈活性與速度意味著基于Windows CE的設(shè)備能夠被構(gòu)造成各種內(nèi)存結(jié)構(gòu)形式。

手持電腦的內(nèi)存結(jié)構(gòu)

典型的Windows CE的硬件平臺的內(nèi)存結(jié)構(gòu)是與基于 Windows系統(tǒng)的臺式電腦的內(nèi)存結(jié)構(gòu)十分不同的。 為了知道內(nèi)存通常如何在Windows中被處理的 ,考查基于Windows CE的最普通的代表性的設(shè)備-手持電腦,是很有用的。

在手持電腦中,RAM被分割成兩個主要的部分:存儲內(nèi)存和程序內(nèi)存。 向兩部分分配的RAM的量能被手持電腦用戶修改(在限制范圍內(nèi))。 這個RAM的劃分圖如圖4所示。

在手持電腦中的存儲內(nèi)存類似于臺式電腦的硬盤RAM。 它被用來存儲數(shù)據(jù)和非系統(tǒng)應(yīng)用程序。它的三段中每一段被不同的一套WIN32 API 訪問函數(shù):

Windows CE系統(tǒng)寄存器類似于Windows NT和Windows 95的操作系統(tǒng)的寄存器。你能利用WIN32 寄存器函數(shù)來操縱寄存器中鍵和數(shù)值。

被用戶安裝的應(yīng)用程序和數(shù)據(jù)在一般文件存儲段中。Windows CE文件系統(tǒng)API 是標(biāo)準(zhǔn)WIN32 文件系統(tǒng)的子集函數(shù)。

對于數(shù)據(jù)庫應(yīng)用程序,由Windows CE 數(shù)據(jù)庫API來存儲被管理存儲。這API 對Windows CE是唯一的 ,并且在其它的WIN32 平臺中沒有。

程序內(nèi)存被用于系統(tǒng)和非系統(tǒng)程序的堆棧存儲。 非系統(tǒng)應(yīng)用程序從存儲內(nèi)存(或者或許PC卡)被取得,非壓縮的并且被裝入要執(zhí)行程序內(nèi)存中。

意外情況處理

意外情況處理是強大的編程技術(shù),相應(yīng)一套的WIN32 API 起函數(shù)能容易的發(fā)現(xiàn)未預(yù)料到的錯誤狀況,并且使之恢復(fù)。結(jié)構(gòu)化的意外情況處理,允許危險的段的代碼可能由于硬件資源的問題、設(shè)備的沖突和微小的編碼錯誤而導(dǎo)致失敗,以使這部分程序與其余的應(yīng)用程序分開。這保護(hù)了應(yīng)用程序,使之免于過早的終止或者產(chǎn)生敏感的系統(tǒng)問題。

結(jié)構(gòu)化的意外情況處理包括定義一系列聲明作為保護(hù),并且為第一套的聲明定義了另一個套聲明作為意外情況句柄。 意外情況句柄定義了一個或多個聲明來保障系統(tǒng)的運行,而不管保護(hù)聲明的現(xiàn)有的狀態(tài)。

在大多數(shù)32 位Windows平臺上應(yīng)用WIN32 API 的程序員在運用意外情況句柄的時候通常有兩種選擇,用C或 C++ 編寫應(yīng)用程序,并且利用WIN32提供的處理意外情況的宏,或者利用C++ 編寫應(yīng)用程序,并且使用C++ 語言定義的意外情況處理函數(shù)。

對于這種程序的編寫,Windows CE的開發(fā)者因無法訪問C++的(面向Windows CE的Visual C++ 目前還不支持意外情況處理,所以必須使用WIN32 API的意外情況處理宏。

為了應(yīng)用WIN32意外情況處理,你將使用一套在WIN32 API 中被定義的宏。 下面一段代碼顯示其基本概念:

_try {

// The statements in here have a possibility of failure

// and so are guarded.

}

__finally {

// This is the exception handler. This code will execute

// after the guarded statements, no matter what happened

// in the guarded block of code above.

}

// This code will execute normally if the program flow allows

// it (no goto, exit, etc.)

__try 以及__finally 宏產(chǎn)生了使用意外情況句柄的所必要的底層代碼。

意外情況的處理對諸如在嵌入式的應(yīng)用程序中的那些普通的多線程序是有用的。WIN32結(jié)構(gòu)化意外情況處理宏 是一種容易并且強大的保護(hù)應(yīng)用程序使之免受未預(yù)料到的失敗的方法。

設(shè)備處理

有無數(shù)硬件設(shè)備(外圍設(shè)備)與應(yīng)用Windows的平臺(Windows NT以及 Windows 95)臺式機是兼容的,并且每一年都有更多的東西在市場上涌現(xiàn)。而Windows CE的平臺,通常不支持臺式計算機支持的設(shè)備的很多品種的外圍硬件。 然而,為一嵌入式的的系統(tǒng)創(chuàng)造可靠的設(shè)備接口在嵌入式的程序設(shè)計的過程中,是比較富有挑戰(zhàn)性的部分。 這部分地因為典型的嵌入式的系統(tǒng)接口的時序與其它可操作性的需要遠(yuǎn)比臺式電腦計算系統(tǒng)和應(yīng)用程序的更難。

幸運地,WIN32 API 提供了一套豐富使設(shè)備接口方法,使得設(shè)備接口程序?qū)懫饋砀菀撞⑦m合于特定嵌入式的系統(tǒng)的需要。

WIN32 API是如何幫助的 WIN32 API在你的硬件平臺為你提供一套一致的基于流的接口。 為了使用設(shè)備,你首先利用適合于設(shè)備類型的函數(shù)打開它。 對于大多數(shù)設(shè)備,你利用的函數(shù)是在下列例子中的CreateFile 函數(shù):[!--empirenews.page--]

HANDLE hPort = CreateFile("COM1"); // Open the serial port

CreateFile函數(shù)打開規(guī)定的設(shè)備(串口)并且返回用于以后在該種設(shè)備上的操作(例如讀和寫)的句柄。 各種各樣函數(shù)的(包括ReadFile ,WriteFile ,LockFile 和其他)接受這個句柄為參數(shù),并且允許你(例如)讀寫數(shù)據(jù),檢查設(shè)備狀態(tài),并且將從其它程序的存取被鎖住的設(shè)備或者文件列入清單。 文件輸入輸出操作被處理成與其它設(shè)備類型利用同樣的API 函數(shù),并且在文件之內(nèi)包括隨機的訪問的函數(shù)。 被若干程序或線索同時訪問的設(shè)備和文件可以分區(qū)域地利用LockFile 函數(shù)鎖定。

在你的應(yīng)用程序已完成設(shè)備或者文件之后,它將調(diào)用CloseFile 函數(shù)關(guān)閉設(shè)備,并且進(jìn)行必要的清除設(shè)備的工作。

同步和異步的設(shè)備的處理

嵌入式系統(tǒng)的經(jīng)常有關(guān)鍵的設(shè)備有時序需要。 對于這個理由,對底層的操作系統(tǒng)的軟件接口必須能夠在軟件層次上管理同時(或者幾乎同時)的系統(tǒng)中不同類型的設(shè)備的事件。 WIN32 API 支持對設(shè)備的同步和異步的訪問,并且用復(fù)雜的設(shè)備接口設(shè)計。

同步的接口是那些在軟件需要從設(shè)備得到動作的要求,然后等候結(jié)果。在同步的設(shè)備接口中,最常用的是前面已經(jīng)提到的ReadFile 以及WriteFile函數(shù)。當(dāng)在同步I/O中使用的時候,不論你與磁盤上的文件、并口或是串口、一個通道或其它類型的設(shè)備接口時,都是公用的并且是兼容的。

異步的接口是那些設(shè)備要求應(yīng)用程序為之服務(wù)的接口。一個異步的設(shè)備的好的例子是鍵盤。適當(dāng)和適時的處理異步事件,對于許多嵌入式應(yīng)用程序是至關(guān)緊要的。幸運的是,為Windows CE編寫的設(shè)備驅(qū)動程序能支持同時的多線索訪問驅(qū)動器。這大大地簡化異步輸入設(shè)備的處理。

你所訪問的給定的設(shè)備的方法,取決于那個設(shè)備的特性和你開發(fā)的特定的應(yīng)用程序的要求。如果你在基于你的Windows CE的硬件平臺上創(chuàng)建一個全新的設(shè)備(和設(shè)備驅(qū)動程序),你可以既從你的硬件設(shè)備和驅(qū)動器的層次,又可以從應(yīng)用程序的層次有許多選擇。

定制設(shè)備和WIN32

盡管嵌入式系統(tǒng)可以支持較小數(shù)量的設(shè)備,嵌入式系統(tǒng)能形成唯一的和挑戰(zhàn)型的設(shè)備接口問題。當(dāng)你開發(fā)一個新的硬件平臺并且它支持輸入輸出設(shè)備,在模你設(shè)計的不同層次上,你將不得不作出決策和折衷方案。例如,除非你只使用通常的off-the-shelf硬件,你必然套寫用戶設(shè)備驅(qū)動程序支持你的新外圍設(shè)備。 你也能需要配置你的Windows CE來包含一些設(shè)備處理必要的組件。同時從應(yīng)用程序的層次,為滿足新的設(shè)備的需要,你將需要寫接口代碼。在有如此多變量的情況下,你如何保持你的設(shè)備的一定程度的一致行呢?答案就在WIN32 API 中。在WIN32 API環(huán)境下,寫你的目標(biāo)驅(qū)動程序,你有理由自信的認(rèn)為那些新設(shè)備的接口的應(yīng)用程序開發(fā)者能夠創(chuàng)造可信的,可檢驗和可維護(hù)的基本代碼。Windows CE設(shè)備驅(qū)動程序開發(fā)工具包,或者簡稱DDK ,提供了如何創(chuàng)造WIN32功能強大的設(shè)備驅(qū)動程序信息和范例。

設(shè)備的類型

Windows CE支持兩種基本類型的設(shè)備驅(qū)動程序,內(nèi)置固化的驅(qū)動程序和可安裝的驅(qū)動程序。 如同名字所暗示的,內(nèi)置固化的驅(qū)動程序是被指定用于一個給定的Windows CE的硬件平臺的設(shè)備。Windows CE的嵌入式系統(tǒng)設(shè)計者有責(zé)任提供一個內(nèi)置固化的驅(qū)動程序來驅(qū)動系統(tǒng)所包括的設(shè)備。例如,許多Windows CE平臺有一個LCD 觸摸屏。這些平臺的制造廠為他們的設(shè)備提供設(shè)備驅(qū)動程序,使此硬件可以用于Windows CE操作系統(tǒng)。在完備的系統(tǒng)中,這些內(nèi)置固化的驅(qū)動程序位于Windows CE只讀內(nèi)存中內(nèi)核的周圍。

可安裝的設(shè)備驅(qū)動程序是被設(shè)定為為了任何與Windows CE 硬件平臺臨時連接的外圍的設(shè)備。這個類型的設(shè)備包括:調(diào)制解調(diào)器,打印機,數(shù)字的照相機,PC卡,以及任何數(shù)量的其它外部的設(shè)備。 可安裝的設(shè)備驅(qū)動程序可能位于只讀內(nèi)存中,但是更典型與臨時性的設(shè)備的接口的應(yīng)用程序軟件一同裝載。

總結(jié)

本文已為概略地介紹了面向Windows CE的WIN32 API,其目的是為了突出這種被廣廣泛應(yīng)用的并且十分重要的API的一般的特點和優(yōu)點。有許多其它的細(xì)節(jié)你需要在第一次使用Windows CE嵌入式產(chǎn)品之前來學(xué)習(xí)掌握;幸運的是,有很多的WIN32 API 的信息的資源。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉