采用WDM的精確定時器及其在冗余技術中的應用
3 軟件設計
3. 1 WDM 模式驅動程序
在Window s XP 操作系統(tǒng)中, 運行于用戶模式的應用程序訪問硬件資源是通過Win32 API 調用內核模式的驅動程序實現(xiàn)的。這種內核模式的驅動程序就是WDM(Window s Driver Model) 驅動程序, 它是微軟在Window s XP 操作系統(tǒng)中提出的新的驅動程序模式, 支持即插即用、電源管理和I/ O 管理等功能。圖2 是Window s XP 的系統(tǒng)結構。
如圖2 所示設備驅動程序是操作系統(tǒng)的一個組成部分, 它由I/ O 管理器( I/ O Manager ) 管理和調動。
I/ O管理器每收到一個來自用戶應用程序的請求就創(chuàng)建一個I/ O 請求包( IRP) 的數(shù)據(jù)結構, 并將其作為參數(shù)傳遞給驅動程序。驅動程序通過識別IRP 中的物理設備對象( PDO) 來區(qū)別是發(fā)送給哪一個設備。IRP 結構中存放請求的類型、用戶緩沖區(qū)的首地址、用戶請求數(shù)據(jù)的長度等信息。驅動程序處理完這個請求后, 在該結構中填入處理結果的有關信息, 調用IoCompleteRequest 將其返回給I/ O 管理器, 用戶應用程序的請求隨即返回。訪問硬件時, 驅動程序通過調用硬件抽象層的函數(shù)實現(xiàn)。
圖2 Windows XP 系統(tǒng)結構
WDM 的開發(fā)可采用DDK, DriverWorks 等開發(fā)工具。以下重點描述在此WDM 驅動實例中采用定時查詢實現(xiàn)CAN 總線冗余功能。
3. 2 驅動冗余設計
本設計中, CAN 通路采用2 路冗余, 使得當一個CAN 總線接口出現(xiàn)故障時, 可以很方便地切換到另一個CAN 總線接口。
故障檢測在定時器中實現(xiàn)。在DriverWorks 中有兩種定時器對象, 即附屬于設備對象的1 Hz 定時器和KTimedCallback 類定義的定時器, WDM 定時方法是通過它們實現(xiàn)的。KT imedCal lback 是KTimer 的派生類, KTimer 封裝了系統(tǒng)定時器, 構成分發(fā)對象定時器類, 可用于同步目的。KT imedCal lback 類包含了系統(tǒng)延時過程調用( DPC) 對象, 當定時器超時后系統(tǒng)就調用DPC。KTimedCallback 的成員函數(shù)主要是Set 和SetPeriodic, Set 用于設置一次有效定時器參數(shù), SetPeriodie 設置周期性定時器參數(shù), Set 和SetPeriodic 在設置定時參數(shù)時同時啟動定時器并建立與回調函數(shù)的關聯(lián),定時器超時后調用回調函數(shù)。
具體的切換工作放在DPC 中完成。DPC 為推遲過程調用, 一些操作不適合在ISR 中處理需放入限制較少的DPC 中, 如通知事件置標記等等。DPC 是一個通用機制, 但通常都用在中斷處理中。在最普通的情況下, ISR 決定當前請求的完成并請求一個DPC。之后,內核在DISPATCH_LEVEL 級上調用這個DPC 例程。
評論