第一節中提供的ISR例程中包含了了兩個內核函數調用–OSIntEnter()和OSIntExit(),在不受內核監控的ISR中,不需要這兩個函數。因此,該類型的ISR格式如下所示。應該指出的是,保存CPU寄存器的方法不一定相同,因為它可能不需要保存所有涉及上下文切換的寄存器。此外,開發不受內核監控的ISR的開發人員需牢記,前面的ISR代碼中可以添加代碼來重新啟用中斷,以實現中斷嵌套,然而,在不受內核監控的ISR中,這種處理方式是有問題的。
NonKernelAwareISR:
Save CPU registers;
App_ISR();
Restore CPU registers;
Return
在μC/OS-II和μC/OS-III觀察到的中斷例程的不同方式,使得寫這些代碼的工作變得有挑戰性。然而,根據上面的信息和前一篇文章的內容,總結出實現ISR開發的兩條基本規則:
應用開發人員需基于不同的中斷控制器,實現中斷相關的代碼,參考Micriμm的文檔和示例項目來確定適用于用戶平臺的 “典型”的ISR。
如果ISR程序不使用內核服務,不會被使用內核服務的程序中斷,可以使用不受內核監控的方式實現ISR,減少系統開銷。
基于這些規則,你可以充分利用嵌入式微控制器的功能,使用任務和中斷編寫可靠的應用程序。更多信息可以參考μC/OS-II和μC/OS-III書及在線文檔。