參考 圖4.C4M-OS中斷服務常式分享登錄機制圖,C4M-OS在GCC原始ISR之外,另外創建了InternalISR。當使用者未使用特定中斷向量的 ISR時,該中斷向量的Internal ISR會自動啟用。每當Internal ISR被中斷向量觸發執行時,它會查詢其工作登錄表找到其中致能工作的函式指標,並呼叫並執行該函式。
使用
C4M-OS中斷服務常式分享登錄機制,有兩個好處,第一:因為Internal ISR架空了ISR,它吸收了不同C語言編譯器處理中斷向量表的語法不同,因此應用程式可以攜往不同的C編譯器 IDE平台。第二:不同的工作可以分享同一個硬體中斷向量,達到同步輸出入的效果,且可以獨立禁致能各自的輸出入及後續工作串。
圖4. C4M-OS中斷服務常式分享登錄機制圖
C4MLib函式庫提供了
中斷服務分享器可以開放工作方塊登錄來分享各個硬體中斷內部服務常式Internal ISR所提供的執行服務。為了將內部中斷服務分享給軟即時讀寫工作方塊,應用程式首先必須要先完成硬體中斷分享器佈局,然後將想要分享此一中斷的工作方塊登錄進此一硬體中斷分享工作名單並取得分享工作編號。之後C4M-OS便會在中斷事件發生後自動執行分享名單中己致能的工作編號。使用者可以依據需求在適當的時機,呼叫禁致能函式來禁致能硬體中斷分享工作。
硬體中斷分享器佈局巨集 XXXHWINT_LAY():
本課程所使用的ATMega128有多種類型的週邊硬體中斷源,毎種類型中斷源都可能有複數個。硬體中斷分享器本身即是一個工作方塊。C4M-OS為每一類型的中斷源準備了一份工作表單,足以容納同類型的所有中斷分享器。而且每一個硬體中斷分享器,又有一份工作登錄表單。要管理中斷分享工作,必需要定義出中斷分享管理結構體,表單並將它們鏈結起來。為了方便使用者組織架構中斷分享器,CC4M-OS提供了硬體中斷分享器佈局巨集。
XXXHWINT_LAY(INTSTR,ININUM,TASKNUM)
說明:呼叫本巨集會針對特定類型硬體中斷源XXX,建立一個以型態為HWIntStr_t的硬體中斷分享器結構體以及搭配的空白分享工作表單。 並且將執行本身的工作方塊掛進所屬類型硬體中斷表單XXXIntList_p[n]中等待對應於它的INTERNAL_ISR中斷服務常式執行。其中XXX為特定型態之硬體中斷,例如外部中斷EXT,類比轉數位中斷ADC。 n為此型MCU XXX型硬體中斷源的數目。例如外部中斷EXT共有8個,ADC只有1個。