中斷是硬體與軟體打交道的重要方法,因此,大多數驅動程式都涉及到對中斷的處理,本文就驅動程式的開發人員以及bsp的開發人員的角度,來談談windowsce中中斷的處理過程。
如果乙個驅動程式要處理乙個中斷,那麼驅動程式需要首先建立乙個事件,可以使用createevent函式,然後呼叫interruptinitialize將該事件與中斷號繫結,這一步就會使能該中斷,oal中的oeminerrupteenable就會被呼叫,如果該函式不返回true的話,interruptinitialize就會失敗。然後驅動程式中的ist就可以使用waitforsingleobject函式來等待中斷的發生。
當乙個硬體中斷發生之後,作業系統陷入異常,中斷向量指示進入ce的異常處理程式,該異常處理程式然後呼叫oal的oeminterrupthandler函式,該函式檢測硬體之後,將硬體中斷轉換為軟體的中斷號,返回給系統。該中斷號就是上面提到的interruptinitialize中使用的那個中斷號。系統得到該中斷號之後,就會找到該中斷號對應的事件,並喚醒等待相應事件的執行緒(ist),然後ist就可以在使用者態進行中斷處理。處理完成之後,ist需要呼叫interruptdone來告訴作業系統中斷處理結束,作業系統再次呼叫oal中的oeminterruptdone函式,最後完成中斷的處理。
在上面的描述中,驅動程式需要使用的是interruptinitialize,waitforsingleobject和interruptdone三個函式,而bsp開發者需要主要考慮的是oeminerrupteenable,oeminterrupthandler,oeminterruptdone三個函式。當然,這是上面提到的一些函式,實際上bsp開發者在中斷部分還需要考慮init以及disable等等函式,這裡就不再討論了。
很好的一篇文章,對驅動開發來說很有幫助!
感謝作者的共享精神!
WinCE下的中斷處理過程15814101899
中斷在系統設計中的應用非常廣泛,可以說,硬體中斷 軟體中斷無處不在,在wince下驅動開發更是如此,比如 按鍵中斷 觸控螢幕中斷 audio中斷 dma中斷.等等,幾乎含概每個模組。因此,了解中斷的處理過程對驅動開發極其重要,下面對wince下的中斷處理過程做乙個簡單介紹。中斷處理可以分為兩部分 中...
中斷處理過程
部分摘自 中斷 所謂中斷就是指cpu在正常執行程式的時候,由於內部 外部事件的出發 或由程式預先設定而引起cpu暫時中止當前正在執行的程式,儲存被執行程式相關資訊到棧中,轉而去執行為內部 外部事件 或由程式預先設定的事件的中斷服務子程式,待執行完中斷服務子程式後,cpu再獲取被儲存在棧中被中斷的程式...
中斷及中斷處理過程
1.中斷和異常的概念區別 intel的官方文件裡將中斷和異常理解為兩種中斷當前程式執行的不同機制。這是中斷和異常的共同點。不同點在於 中斷 interrupt 是非同步的事件,典型的比如由i o裝置觸發 異常 exception 是同步的事件,典型的比如處理器執行某條指令時發現出錯了等等。中斷又可以...