新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Windows CE陷阱調度機制

        Windows CE陷阱調度機制

        作者: 時間:2010-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/151560.htm

        三. 如何進行中斷處理?

        (1) 中斷處理流程

        ①硬件設備向Kernel發送中斷異常的代碼,如果檢測到這個中斷異常,就會被Kernel層的異常處理所截獲。然后,中斷服務程序會調用OAL例程中的OEMInterruptDisable函數,這個函數會通知硬件在處理完這一中斷前關閉特殊的中斷,但其它的中斷仍然處于開放狀態,中斷服務例程ISR會被調用來決定如何處理這一中斷。

        ②Kernel接收到ISR的返回值可得知如何處理這一中斷。它的響應結果之一是忽略掉這一中斷不作處理(SYSINTR_NOP),或另一結果是準備執行IST。然后,Kernel引發中斷服務程序去喚醒中斷服務線程。IST是常規的Win32線程,一旦啟動后,它會創建必要的EVENT,然后等待該EVENT被激發。中斷服務通過調用PulseEvent函數來激發EVENT,從而喚醒IST線程運行。當喚醒以后,IST會對中斷進行處理。

        ③當IST處理完成后,還需要調用InterruptDone函數通知Kernel。Kernel則調用OEMInterruptDone函數完成此次中斷的處理過程。最后,OAL例程通知硬件設備重新啟用中斷。

        (2)中斷處理涉及的幾個常用函數

        在處理中斷時會涉及到兩類函數的使用,第一類是供OAL調用的ISR函數,例如HookInterrupt函數在OEMInit函數中被調用以關聯IRQ和ISR,UnhookInterrupt函數用來終止IRQ和ISR的關聯。第二類是供驅動程序調用的IST函數,例如InterruptInitialize函數用來將EVENT對象和邏輯中斷號關聯并允許中斷,InterruptDone函數用來通知中斷處理的結束,InterruptDisable函數被驅動程序調用以關閉中斷同時取消被InterruptInitialize初始化的EVENT對象。

        ISR函數屬于OAL層,它將CPU寄存器中的數據移動到內存緩沖區中,但是它不能做更多的工作,其中一個原因是它不能訪問用戶態的存儲區,它要把這些工作交給IST來完成。ISR函數做的另一項工作是進行物理中斷號和邏輯中斷號的映射。經過ISR后,就能把這一物理中斷轉換成Windows CE標準的SYSINTR_KEYBOARD邏輯中斷。Kernel會根據這個邏輯中斷值找到對應的EVENT,從而喚醒IST。

        最后,需要提醒一下的是,常常有一些開發人員習慣拖延或忽視調度的編寫。因為輕視調度這一壞習慣是如此常見,它甚至已經影響到了Windows CE系統的研發。因此,建議從開始時就應該著手進行調度研發和計劃,應該投入大精力把陷阱調度的策略融合到嵌入式產品中。


        上一頁 1 2 下一頁

        關鍵詞: 機制 調度 陷阱 CE Windows

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 丹东市| 高唐县| 嵊州市| 托克逊县| 巨鹿县| 石屏县| 东方市| 故城县| 双流县| 泸水县| 遂昌县| 竹溪县| 长沙市| 香格里拉县| 邵武市| 宜兴市| 德清县| 长兴县| 肥乡县| 三门县| 定襄县| 合作市| 河东区| 长武县| 五华县| 无为县| 伊宁市| 道孚县| 苏州市| 峨边| 米易县| 扬州市| 桑日县| 宜城市| 沧源| 辽中县| 临桂县| 澄城县| 和林格尔县| 屯留县| 鄂伦春自治旗|