<p id="nxp5x"><big id="nxp5x"><noframes id="nxp5x">

    <var id="nxp5x"><video id="nxp5x"></video></var>

          <em id="nxp5x"></em>

              首 頁 本刊概況 出 版 人 發行統計 在線訂閱 歡迎投稿 市場分析 1 組織交流 1 關于我們
             
            1
               通信短波
            1
               新品之窗
            1
               優秀論文
            1
               通信趨勢
            1
               特別企劃
            1
               運營商動態
            1
               技術前沿
            1
               市場聚焦
            1
               通信視點
            1
               信息化論壇
            1
            當前位置:首頁 > 優秀論文
            Windows CE .NET驅動程序電源管理功能研究
            作者:呂嘉偉 北京郵電大學
            來源:本站原創
            更新時間:2009/12/30 13:40:00
            正文:

            1 前言

            近年來,隨著計算機硬件技術及軟件應用技術的迅速發展,嵌入式設備在各個行業的應用呈指數級增長。作為主要的嵌入式操作系統之一,Windows CE經歷了眾多版本,其體系架構也多次變更。由于它與桌面WindowsAPI兼容性,實時性、模塊化等優勢,Windows CE在嵌入式設備中得到了廣泛的應用。

            本文從WinCE的設備驅動程序出發,詳細介紹了其電源管理的原理及特點,并針對WinCE設備驅動程序的開發,從電源管理的角度提出了一些建議,有助于程序員開發出更加適合嵌入式應用環境的WinCE驅動程序。

            2 WinCE驅動程序體系架構

            驅動程序為操作系統提供了物理或虛擬設備的接口。操作系統希望驅動程序能夠提供一種預定義的、統一的接口,從而生成針對特定的硬件或虛擬設備的抽象。在WinCE中,這些特定的接口是以一系列函數和IOCTL代碼來實現的。

            2.1 WinCE驅動程序的分類

            從不同的角度來看,WinCE驅動程序有多種分類方式。依據其提供的設備驅動模型,可分為本機驅動(native device driver)、流接口驅動(stream interface device driver)、USB驅動和NDIS驅動(Network Driver Interface Specification)。對于前兩種驅動模型,按其實現架構來說,又可以分為單層驅動(monolithic driver)、混合驅動(hybrid driver)和分層驅動(layered driver)。

            WinCE下,最常見的是分層驅動結構。

             2.1

             

            在這種結構中,驅動程序由兩部分組成:MDD庫和PDD庫。其中MDD(Model Device Driver)是與操作系統相連,而與物理設備無關的部分。它提供了操作系統所需的一些設備驅動接口,如IOCTL控制代碼或相關函數。這些接口被稱為設備驅動接口(Device Driver Interface)。MDD層同時也實現了中斷服務線程(Interrupt Service Thread),用于與PDD層交互。這些接口稱為設備驅動服務接口(Device Driver Service Interface)。服務接口取決于驅動程序的類型和MDD庫的實現。PDD層包含與特定硬件設備相關的代碼實現,并向MDD層提供了一些預定義的接口(DDSI)。MDDPDD如圖2.1所示。

            這種分層的驅動模型使得驅動的開發和移植都變得更加簡單。MDD層的代碼通常無需改變,開發人員只需要重新實現PDD層即可。

            3. WinCE電源管理

            從最早版本開始,WinCE就包含了內置電池的管理機制,支持簡單的系統超時關閉功能。從WinCE .NET開始,操作系統引入新的定制組件Power Manager,來更加精確地管理WinCE設備的電源狀態。

            Power Manager可以調節系統中的各個設備本身的電源狀態,使其隨著整個WinCE平臺或應用程序的需求而改變。

            3.1 整體架構

             3.1

             

            WinCE驅動程序的電源管理框架如圖3.1所示。設備驅動可以通過Power Manager獲取電源狀態改變的通知。這些通知是以IOCTL代碼來表示的。IOCTL分離了設備的電源狀態和整個系統的電源狀態。整個系統可以在運行的情況下關閉某個設備,也可以在掛起的狀態下保持對某個設備的供電,以保證其正常的運行。

            除了能夠管理設備的供電,Power Manager還能夠在特定電源事件發生時,通知相關應用程序。

            3.2 WinCE電源狀態

            WinCE定義了兩種電源狀態:系統電源狀態和設備電源狀態。系統電源狀態是由OEM定義在WinCE的注冊表中的,并且系統中可以有任意多的系統電源狀態;設備電源狀態是預定義好的,Power Manager可以通過這些設備電源狀態,指示驅動程序在不同的設備電源狀態下,調整設備的工作情況。

            3.2.1 設備電源狀態:

            設備電源狀態一共有5種:

            D0Full on,設備以滿電力運行,并且向用戶提供完整的功能。

            D1Low on,設備消耗較D0少的電力,并且其性能也達不到其最高值。

            D2Standby,設備只得到部分電力,但是可以在需要的時候自動被喚醒。

            D3Sleep,設備部分供電,且只有由設備本身發起的喚醒請求才能將其喚醒。

            D4Off,設備未得到供電,或不能消耗太多電力。

            物理設備本身不必支持以上所有的設備電源狀態,但卻必須支持D0狀態,即滿電力運行。如果驅動程序要求設備進入某個設備本身不支持的電源狀態Dn,則設備會進入后一個電源狀態即Dn+1。

            D3設備電源狀態是一個比較特殊的狀態,需要單獨考慮。因為系統允許D3狀態下的設備來將整個系統從掛起狀態下激活。但是,支持D3的設備并不能保證它一定能夠喚醒整個系統。

            3.2.2 系統電源狀態:

            系統電源狀態是由OEM來定義的。OEM可以定義諸如On, SystemIdle, OnBattery, InCradle等電源狀態。系統電源狀態就是一些定義在注冊中的鍵值。OEM可以隨意定義自己需要的系統電源狀態。

            OEM在定義系統電源狀態的時候,就必須指定系統電源狀態和設備電源狀態之間的映射關系。這些映射關系同樣也定義在注冊表中。系統電源狀態為指定狀態下的設備制定了設備電源狀態的上限值。

            3.2.3 系統電源狀態和設備電源狀態之間的映射關系:

            在注冊表中,系統電源狀態有以下類似的鍵值:

            [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\Stat_1]

            Default=dword:0; D0

            Flags=dword:10000; POWER_STATE_ON

            COM1:=dword1; D1

            其中,“Default”表示在Stat_1這種系統電源狀態下,所有設備電源狀態最高都可以達到D0。但“COM1”項定義了一個例外,即串口設備COM1在這種狀態下,最高只能達到D1。

            3.3 Power ManagerAPI接口

            Power Manager有三種類型的客戶:與Power Manager交互的驅動程序,想要改變系統或設備電源狀態的應用程序和想要得到電源事件(如電源狀態轉換)通知的應用程序。

            3.3.1 設備驅動程序接口:

            Power Manager通過DeviceIoControl()函數配合IOCTL代碼向下調用驅動程序,來改變設備的能力并更新其電源狀態。驅動程序通過DevicePowerNotify()函數來調用Power Manager的功能。

            3.3.2 應用程序接口:

            WinCE為應用程序提供了若干API來允許其影響系統的電源狀態。

            GetSystemPowerState/SetSystemPowerState:獲取/請求Power Manager設置系統的電源狀態。應用程序既可以通過明確的狀態名稱來請求狀態轉換,也可以通過掩碼的方式來隱式地請求狀態轉換。這些掩碼最終會被Power Manager理解并轉換成具體的系統電源狀態。

            SetPowerRequirement:請求Power Manager將一個指定設備的電源維持在一定狀態之上,并且這個狀態通常會在Power Requirement有效的情況下,一直持續下去,而不論設備本身或系統改變其電源狀態。

            3.3.3 應用程序的電源狀態通知接口:

            RequestPowerNotifications:通過消息隊列,使得應用程序能夠在某些特定的系統電源狀態發生變化時,得到通知。

            3.4 活動計時器

            活動計時器是WinCE用于電源管理的一個組件。Power Manager在初始化時,會從注冊表中讀取一系列活動計時器的鍵值。然后,針對每個計時器,Power Manager檢查其超時值,和可選的喚醒源。然后它會創建三種類型的事件(event):計時器復位事件、活躍復位事件和非活躍復位事件。

            如果在指定超時時間內,計時器復位事件沒有被觸發,則Power Manager會將活躍事件復位,并觸發非活躍事件。如果計時器復位事件被觸發,則Power Manager會將觸發活躍事件并復位非活躍事件。

            活動計時器的配置存放在注冊表中。Power Manager會通過注冊表鍵值創建以上所述的三個事件。而驅動程序可以從注冊表中讀取計時器復位事件的名稱,創建指定該事件的句柄;然后,在適當的時候觸發該事件,從而通知Power Manager,表示系統當前是活躍的。計時器復位事件相當于活躍計時器的輸入,而兩個狀態事件就是對應的輸出。應用程序或其它驅動程序可以通過計時器事件的狀態,來判斷系統當前是否活躍;顒佑嫊r器的框架如圖3.2所示。

             3.2

             

            Power Manager不會阻塞在計時器復位事件上,而只是在超時的時候,去檢查一下計時器復位事件在這段時間內是否被觸發。

            由于活動計時器自身的特性,除了在電源管理方面的應用,它也可以作為socket編程中的超時定時器,檢查收、發包是否超時。

            3.5 驅動程序電源管理的設計原則

            3.5.1 設備的電源自管理

            設備通過DevicePowerNotify()來請求Power Manager改變其電源狀態。Power Manager收到設備的請求后,首先檢查所請求的設備電源狀態是否落在由應用程序規定的最小值和由當前系統電源狀態規定的最大值之間。如果這種請求可以接受,則Power Manager會通過DeviceIoControl()IOCTL_POWER_SET代碼來調用驅動程序,改變設備電源狀態。

            3.5.2 驅動程序接口

            當設備驅動程序需要加入電源管理時,它就必須擁有流接口,以便與Power Manager交互。一旦創建好了一個流接口的驅動程序后,就可以向其中加入處理IOCTL的代碼。然后通過AdvertiseInterface(),告知Power Manager,當前驅動程序是支持電源管理功能的。最后,就可以在驅動程序中處理相應的設備電源狀態了。

            4. 總結

            本文簡要介紹了WinCE下驅動程序的開發框架,并詳細分析了其電源管理功能。在嵌入式應用環境下,由于應用場景的限制,編寫優秀的驅動程序,不只是注重其正確性及性能,“量體裁衣”才是最重要的原則。良好的驅動程序,可以為嵌入式平臺節約大量的電力。通過利用WinCE自身的電源管理功能,驅動程序可以與Power Manager進行有效的溝通。這樣不但有利于驅動程序控制設備的電力消耗,也使得自己能夠與整個系統的電源狀態協調一致,從而更好地與系統中的其它軟件、硬件進入配合,滿足設備的功能、性能及電力消耗的需求。

            參考文獻

             

            [1]      Stanislav Pavlov, Pavel Belevsky. Windows Embedded CE 6.0 Fundamentals.

            [2]      Developing a device driver. MSDN library, 2008.

            [3]      胡軍輝,王友釗。 Windows CE設備驅動程序開發。 計算機工程,2006年,第32卷,41-43。

            [4]      劉文杰 等。 Windows CE.NET環境下的流接口驅動程序開發。 科學技術與工程,2006年,第6卷,3357-3359。

            [5]      顧崢浩 等。 WinCE流驅動程序設計概述。 微處理機,2007年,第3期,81-83。

            作者介紹:

                  呂嘉偉  北京郵電大學   嵌入式系統與寬帶通信實驗室 09832

             

             
             
               
            《通信市場》 中國·北京·復興路49號通信市場(100036) 點擊查看具體位置
            電話:86-10-6820 7724, 6820 7726
            京ICP備05037146號-8
            建議使用 Microsoft IE4.0 以上版本 800*600瀏覽 如果您有什么建議和意見請與管理員聯系
            欧美成人观看免费全部欧美老妇0