中文大香无码蕉字幕_18p少妇下一篇_黄片高清中文字慕一区二区_九九九精品国产10

電池驅(qū)動(dòng)深度解析

鉅大鋰電  |  點(diǎn)擊量:0  |  2018年09月29日  

WindowsCE中包含的樣本設(shè)備驅(qū)動(dòng)程序分為兩種類(lèi)型:?jiǎn)纹?qū)動(dòng)程序(Monolithicdevicedriver)和分層驅(qū)動(dòng)程序(LayeredDevicedriver)。采用分層開(kāi)發(fā)模式可以降低開(kāi)發(fā)難度,縮短開(kāi)發(fā)周期,在電池驅(qū)動(dòng)開(kāi)發(fā)中使用分層驅(qū)動(dòng)開(kāi)發(fā)模式。


WindowsCE電池驅(qū)動(dòng)要求的PDD函數(shù)包括:


BatteryPDDInitialize、BatteryPDDDeinitialize、BatteryPDDGetStatus、BatteryPDDGetLevels、BatteryPDDSupportsChangeNotification、BatteryPDDPowerHandler、BatteryPDDResume。


WindowsCE電池驅(qū)動(dòng)要求的MDD函數(shù)包括:


Init、Deinit、Open、Close、Read、Write、Seek、PowerDown、PowerUp、IOControl。


分層驅(qū)動(dòng)程序由兩個(gè)獨(dú)立的層組成:上層是模型設(shè)備驅(qū)動(dòng)程序(MDD),下層是依賴平臺(tái)的驅(qū)動(dòng)程序(PDD)。設(shè)備驅(qū)動(dòng)程序服務(wù)器提供的接口(DDSI)是在PDD中實(shí)現(xiàn)的函數(shù)集,并由MDD調(diào)用。由于微軟提供了所有與MDD模塊相關(guān)的源代碼,所以對(duì)這部分不用做任何改動(dòng),只需將自己的PDD模塊與MDD模塊鏈結(jié)成一個(gè)公用庫(kù)即可[3]。MDD通過(guò)IoCTLS調(diào)用PDD中的特定函數(shù)來(lái)訪問(wèn)硬件的具體特性。


電池驅(qū)動(dòng)初始化過(guò)程


在系統(tǒng)上電自檢成功后,上層調(diào)用電池驅(qū)動(dòng)入口函數(shù),進(jìn)行電池驅(qū)動(dòng)初始化工作:


(1)調(diào)用BatteryAPIGetSystemPowerStatusEx2函數(shù)更新電池電量結(jié)構(gòu)體PSYSTEMPOWERSTATUS_EX2中的數(shù)據(jù)。


(2)調(diào)用PDD層的初始化函數(shù)BatteryPDDInitialize;在PDD層中,為GPIO寄存器和電源管理寄存器開(kāi)辟兩段虛擬內(nèi)存。


(3)初始化電池全局變量。


(4)初始化存放電池電量值的環(huán)形緩沖區(qū)。


(5)判斷是否已經(jīng)進(jìn)行中斷事件初始化,如果沒(méi)有初始化,則進(jìn)行下面的操作,如果已經(jīng)進(jìn)行了一次初始化,則關(guān)閉事件句柄。


(6)如果中斷事件成功,則調(diào)用ResumeThreadProc創(chuàng)建電池線程。在線程的主調(diào)函數(shù)中,設(shè)置電池線程的優(yōu)先級(jí),然后在循環(huán)中等待中斷事件。


(7)初始化AC97的寄存器。

相關(guān)產(chǎn)品