鉅大鋰電 | 點擊量:0次 | 2018年09月29日
電池驅動深度解析
WindowsCE中包含的樣本設備驅動程序分為兩種類型:單片驅動程序(Monolithicdevicedriver)和分層驅動程序(LayeredDevicedriver)。采用分層開發模式可以降低開發難度,縮短開發周期,在電池驅動開發中使用分層驅動開發模式。
WindowsCE電池驅動要求的PDD函數包括:
BatteryPDDInitialize、BatteryPDDDeinitialize、BatteryPDDGetStatus、BatteryPDDGetLevels、BatteryPDDSupportsChangeNotification、BatteryPDDPowerHandler、BatteryPDDResume。
WindowsCE電池驅動要求的MDD函數包括:
Init、Deinit、Open、Close、Read、Write、Seek、PowerDown、PowerUp、IOControl。
分層驅動程序由兩個獨立的層組成:上層是模型設備驅動程序(MDD),下層是依賴平臺的驅動程序(PDD)。設備驅動程序服務器提供的接口(DDSI)是在PDD中實現的函數集,并由MDD調用。由于微軟提供了所有與MDD模塊相關的源代碼,所以對這部分不用做任何改動,只需將自己的PDD模塊與MDD模塊鏈結成一個公用庫即可[3]。MDD通過IoCTLS調用PDD中的特定函數來訪問硬件的具體特性。
電池驅動初始化過程
在系統上電自檢成功后,上層調用電池驅動入口函數,進行電池驅動初始化工作:
(1)調用BatteryAPIGetSystemPowerStatusEx2函數更新電池電量結構體PSYSTEMPOWERSTATUS_EX2中的數據。
(2)調用PDD層的初始化函數BatteryPDDInitialize;在PDD層中,為GPIO寄存器和電源管理寄存器開辟兩段虛擬內存。
(3)初始化電池全局變量。
(4)初始化存放電池電量值的環形緩沖區。
(5)判斷是否已經進行中斷事件初始化,如果沒有初始化,則進行下面的操作,如果已經進行了一次初始化,則關閉事件句柄。
(6)如果中斷事件成功,則調用ResumeThreadProc創建電池線程。在線程的主調函數中,設置電池線程的優先級,然后在循環中等待中斷事件。
(7)初始化AC97的寄存器。
上一篇:電池故障預警分析