新聞中心

EEPW首頁 > 消費電子 > WinCE嵌入式開發(fā)程序入門

WinCE嵌入式開發(fā)程序入門

——
作者: 時間:2006-03-25 來源: 收藏

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

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

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

  概述32位Windows和WIN32編程模型。 

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

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

  解釋 Win32意外操作的概念。 

  比較同步和不同步設備的界面的不同的方法。 

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

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

 簡介 

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

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

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

  什么是WIN32? 

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

  Windows 95, Windows 98 
  Windows NT 
  Windows CE 

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

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

{{分頁}}

WIN32與Microsoft基本類庫(MFC) 

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

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

  本文直接介紹WIN32 API。應用 Windows CE下的MFC的詳細的消息,參閱 Windows CE SDK文檔。 

  WIN32程序模型 

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

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

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

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

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

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

  程序和線索 

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

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

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

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

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

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

消息 

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

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

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

{{分頁}}

  中斷處理 

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

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

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

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

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

  內(nèi)存管理 

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

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

  Windows CE的存儲結(jié)構 

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

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

  然而,作為一個嵌入式的系統(tǒng)的設計者,你將需要細心考慮將在你新的硬件平臺上執(zhí)行的應用程序的內(nèi)存需要,并且全面考慮成本、速度和可靠性,平衡各種目標的沖突。 如果你為使用Windows CE開發(fā)一個新的硬件平臺 ,Windows CE的面向Visual C++ 的嵌入式軟件包包括資源可以幫助你做出這些決策,并且從而構成操作系統(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)存中放置應用程序代碼。 例如,Pocket Word,Pocket Excel和其它應用程序程序,包括在手持電腦只讀內(nèi)存中被提供的。 

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

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

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

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

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

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

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

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

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

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

{{分頁}}

  意外情況處理 

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

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

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

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

  為了應用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)生了使用意外情況句柄的所必要的底層代碼。 

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

設備處理 

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

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

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

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

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

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

  同步和異步的設備的處理 

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

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

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

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

  定制設備和WIN32 

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

  設備的類型 

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

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

  總結(jié) 

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

  這些資源包括Microsoft開發(fā)網(wǎng)絡(MSDN ),文章(諸如本文)和報紙,以及大量出版的書。[/b]



關鍵詞: 操作系統(tǒng)

評論


相關推薦

技術專區(qū)

關閉