Cortex-M3 咬尾中斷 與 晚到中斷


【咬尾中斷】
在處理器在響應某些異常時,如果又發生其他異常,但它們優先級不夠高,則它們會被阻塞。

那么,在當前的異常執行返回后,系統處理懸起的異常時,倘若還是先POP,然后又把POP處理的內容PUSH回去,那么就白白浪費CPU時間了。因此,Cortex-M3不會再POP這些寄存器,而是繼續使用上一個異常已經PUSH好的結果,消除POP和PUSH操作的耗時。

這么一來,看上去好像后一個異常把前一個的尾巴要掉了,前前后后只執行了一次PUSH/POP操作。於是,這兩個異常之間的“時間溝”就變窄了很多,如圖所示:

和常規中斷處理(ARM7)的比較:

【晚到中斷】
Cortex-M3的中斷處理還有另一個機制,它強調了優先級的作用,這就是“晚到的異常處理”。

當Cortex-M3對某異常的響應序列還處在早期:入棧的階段,尚未執行其他服務程序時。如果此時收到了更高優先級異常的請求,則本次入棧就成了高優先級中斷做的了。入棧后,將執行高優先級的異常服務程序。可見,高優先級的異常雖然來晚了,卻因為優先級高使得服務程序可以被先處理,低優先級異常的入棧操作則變成了為高優先級異常的入棧。
比如,若在響應某低優先級異常#1的早起,檢測到了高優先級異常#2,則只要#2沒有太晚,就能以“晚到中斷”的方式處理,在入棧完畢后執行ISR#2。如圖所示:

如果異常#2來得太晚,以至於已經執行了ISR#1的指令,則按普通的搶占處理,這會需要更多的處理器時間和額外32字節的堆棧空間。在ISR#2執行完畢后,則以“咬尾中斷”的方式來啟動ISR#1的執行。

 


   參考摘錄:

《Cortex-M內核系列和STM32-講座2教程.pdf》

《ARM Cortex-M3權威指南.pdf》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM