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