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