咬尾中斷
Cortex-M3 內(nèi)核發(fā)生中斷時(shí),硬件會(huì)自動(dòng)將 XPSR、PC、LR、R12、R3、R2、R1 和 R0 這 8 個(gè)寄存器壓入棧,其余的 R4~R11、LR、XPSR 寄存器的備份則需要由 C 編譯器去做。
我們知道每次中斷操作有三部曲:入棧+ISR+出棧。**Cortex-M3 內(nèi)核支持中斷嵌套。所謂中斷嵌套就是高優(yōu)先級(jí)的中斷可以打斷低優(yōu)先級(jí)的中斷轉(zhuǎn)而去執(zhí)行高優(yōu)先級(jí)的中斷服務(wù)程序,當(dāng)高優(yōu)先級(jí)中斷服務(wù)程序執(zhí)行完畢再去接著執(zhí)行低優(yōu)先級(jí)的中斷服務(wù)程序。
若在高優(yōu)先級(jí)中斷服務(wù)程序執(zhí)行過(guò)程中產(chǎn)生了低優(yōu)先級(jí)中斷,那么低優(yōu)先級(jí)中斷需要等高優(yōu)先級(jí)中斷服務(wù)程序執(zhí)行完畢才能去執(zhí)行。
對(duì)于后者兩個(gè)中斷是串行執(zhí)行的,如果按照每個(gè)中斷備份、恢復(fù)寄存器的過(guò)程,那么高優(yōu)先級(jí)中斷先將上述 8 個(gè)寄存器壓入棧中,等執(zhí)行完畢再?gòu)臈V袕棾鲞@ 8 個(gè)寄存器,緊接著低優(yōu)先級(jí)中斷再將這 8 個(gè)寄存器壓入棧中,等執(zhí)行完畢再?gòu)臈V袕棾?,這么做對(duì)這 8 個(gè)寄存器重復(fù)入棧出棧 2 次,浪費(fèi)了時(shí)間,Cortex-M3 內(nèi)核采用咬尾中斷機(jī)制避免這種問(wèn)題發(fā)生,來(lái)看下圖:

Cortex-M3不會(huì)再出棧這些寄存器,而是繼續(xù)使用上一個(gè)異常已經(jīng)壓棧好的結(jié)果,消除出棧和入棧操作的耗時(shí)。這樣一來(lái)我們執(zhí)行兩次中斷只需要:入棧+ISR1+ISR2+出棧。
咬尾中斷看上去好像后一個(gè)異常把前一個(gè)的尾巴咬掉了,前前后后只執(zhí)行了一次PUSH/POP操作。這兩個(gè)異常之間的“時(shí)間溝”就變窄了很多,大大提高了效率!
與常規(guī)中斷處理(ARM7)的比較:

晚到中斷
Cortex-M3的中斷處理還有另一個(gè)機(jī)制,它強(qiáng)調(diào)了優(yōu)先級(jí)的作用,這就是 “晚到的異常處理” 。
這里有一種情況,低優(yōu)先級(jí)中斷先發(fā)生,而在低優(yōu)先級(jí)中斷壓棧的過(guò)程中又發(fā)生了高優(yōu)先級(jí)的中斷,這時(shí)高優(yōu)先級(jí)中斷就會(huì)搶占低優(yōu)先級(jí)中斷,如果高優(yōu)先級(jí)中斷再壓棧然后執(zhí)行,再出棧,低優(yōu)先級(jí)中斷執(zhí)行再出棧,這樣對(duì)這 8 個(gè)寄存器又是重復(fù)入棧出棧 2 次,做了無(wú)用功,Cortex-M3 內(nèi)核采用晚到中斷機(jī)制避免這種問(wèn)題發(fā)生,來(lái)看下圖:
比如,若在響應(yīng)某低優(yōu)先級(jí)異常#1的早起,檢測(cè)到了高優(yōu)先級(jí)異常#2,則只要#2沒(méi)有太晚,就能以“晚到中斷”的方式處理,在入棧完畢后執(zhí)行ISR#2。如圖所示:

如果異常#2來(lái)得太晚,以至于已經(jīng)執(zhí)行了ISR#1的指令,則按普通的搶占處理,這會(huì)需要更多的處理器時(shí)間和額外32字節(jié)的堆??臻g。在ISR#2執(zhí)行完畢后,則以“咬尾中斷”的方式來(lái)啟動(dòng)ISR#1的執(zhí)行。
-
處理器
+關(guān)注
關(guān)注
68文章
20321瀏覽量
254450 -
寄存器
+關(guān)注
關(guān)注
31文章
5616瀏覽量
130347 -
Cortex-M3
+關(guān)注
關(guān)注
9文章
276瀏覽量
61779 -
中斷優(yōu)先級(jí)
+關(guān)注
關(guān)注
0文章
22瀏覽量
9761 -
中斷嵌套
+關(guān)注
關(guān)注
0文章
7瀏覽量
7155
發(fā)布評(píng)論請(qǐng)先 登錄
Cortex-M3處理器中斷與FreeRTOS中斷優(yōu)先級(jí)配置
ARM Cortex-M3的中斷體系
STM32的Cortex-M3中斷異常處理
Cortex-M3處理器中斷和FreeRTOS中斷優(yōu)先級(jí)配置
Cortex-M3 NVIC與中斷控制資料下載
Cortex-M3的異常和中斷資料下載
Cortex-M3和Cortex-M4 Fault異常應(yīng)用之基礎(chǔ)知識(shí)資料下載
Cortex-M3工作模式、異常與中斷介紹資料下載
STM32的NVIC與中斷簡(jiǎn)介&&Cortex-M內(nèi)核的識(shí)別
STM32 的核心Cortex-M3 處理器
Cortex-M4和Cortex-M3內(nèi)核的systick不進(jìn)中斷的軟件延時(shí)
什么是中斷架構(gòu)
Cortex-M3咬尾中斷與晚到中斷基礎(chǔ)知識(shí)介紹
評(píng)論