0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Cortex-M3咬尾中斷與晚到中斷基礎(chǔ)知識(shí)介紹

冬至子 ? 來源:AI電堂 ? 作者:電小二 ? 2023-11-06 16:36 ? 次閱讀

咬尾中斷

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í)行過程中產(chǎn)生了低優(yōu)先級(jí)中斷,那么低優(yōu)先級(jí)中斷需要等高優(yōu)先級(jí)中斷服務(wù)程序執(zhí)行完畢才能去執(zhí)行。

對(duì)于后者兩個(gè)中斷是串行執(zhí)行的,如果按照每個(gè)中斷備份、恢復(fù)寄存器的過程,那么高優(yōu)先級(jí)中斷先將上述 8 個(gè)寄存器壓入棧中,等執(zhí)行完畢再從棧中彈出這 8 個(gè)寄存器,緊接著低優(yōu)先級(jí)中斷再將這 8 個(gè)寄存器壓入棧中,等執(zhí)行完畢再從棧中彈出,這么做對(duì)這 8 個(gè)寄存器重復(fù)入棧出棧 2 次,浪費(fèi)了時(shí)間,Cortex-M3 內(nèi)核采用咬尾中斷機(jī)制避免這種問題發(fā)生,來看下圖:

圖片

Cortex-M3不會(huì)再出棧這些寄存器,而是繼續(xù)使用上一個(gè)異常已經(jīng)壓棧好的結(jié)果,消除出棧和入棧操作的耗時(shí)。這樣一來我們執(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í)中斷壓棧的過程中又發(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 次,做了無用功,Cortex-M3 內(nèi)核采用晚到中斷機(jī)制避免這種問題發(fā)生,來看下圖:

比如,若在響應(yīng)某低優(yōu)先級(jí)異常#1的早起,檢測(cè)到了高優(yōu)先級(jí)異常#2,則只要#2沒有太晚,就能以“晚到中斷”的方式處理,在入棧完畢后執(zhí)行ISR#2。如圖所示:

圖片

如果異常#2來得太晚,以至于已經(jīng)執(zhí)行了ISR#1的指令,則按普通的搶占處理,這會(huì)需要更多的處理器時(shí)間和額外32字節(jié)的堆??臻g。在ISR#2執(zhí)行完畢后,則以“咬尾中斷”的方式來啟動(dòng)ISR#1的執(zhí)行。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19100

    瀏覽量

    228814
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119816
  • Cortex-M3
    +關(guān)注

    關(guān)注

    9

    文章

    269

    瀏覽量

    59406
  • 中斷優(yōu)先級(jí)

    關(guān)注

    0

    文章

    22

    瀏覽量

    9339
  • 中斷嵌套
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6833
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    不同優(yōu)先級(jí)中斷中處理時(shí)怎么理解

    處理中斷時(shí),怎么理解
    發(fā)表于 03-28 03:34

    Cortex-M3處理器中斷與FreeRTOS中斷優(yōu)先級(jí)配置

    置頂/星標(biāo)公眾號(hào),不錯(cuò)過每一條消息!很多朋友對(duì)中斷的一些知識(shí)還是不了解,今天就寫點(diǎn)關(guān)于Cortex-M3處理器中斷相關(guān),以及FreeRTOS中斷
    發(fā)表于 08-13 06:16

    ARM Cortex-M3中斷體系

    外部中斷一、ARM Cortex-M3中斷體系二、代碼思路函數(shù)接口1.為引腳選擇使用哪個(gè)中斷2.配置外部中斷
    發(fā)表于 08-16 07:38

    Cortex-M3權(quán)威指南介紹

    Cortex-M3處理器介紹基本的硬件構(gòu)架和指令系統(tǒng)待
    發(fā)表于 11-23 11:01 ?0次下載

    STM32的Cortex-M3中斷異常處理

    在STM32處理器中有43個(gè)可屏蔽中斷通道(不包含 16個(gè) Cortex?-M3中斷線)。共設(shè)置了16個(gè)可編程的優(yōu)先等級(jí)(使用了 4位中斷
    發(fā)表于 11-16 15:35 ?8094次閱讀
    STM32的<b class='flag-5'>Cortex-M3</b><b class='flag-5'>中斷</b>異常處理

    Cortex-M3處理器中斷和FreeRTOS中斷優(yōu)先級(jí)配置

    STM32屬于ARM中Cortex-M系列處理器,比如:STM32F1數(shù)據(jù)Cortex-M3,STM32F7數(shù)據(jù)Cortex-M7。
    的頭像 發(fā)表于 12-30 11:23 ?7021次閱讀
    <b class='flag-5'>Cortex-M3</b>處理器<b class='flag-5'>中斷</b>和FreeRTOS<b class='flag-5'>中斷</b>優(yōu)先級(jí)配置

    Cortex-M3 NVIC與中斷控制資料下載

    電子發(fā)燒友網(wǎng)為你提供Cortex-M3 NVIC與中斷控制資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-11 08:41 ?7次下載
    <b class='flag-5'>Cortex-M3</b> NVIC與<b class='flag-5'>中斷</b>控制資料下載

    Cortex-M3的異常和中斷資料下載

    電子發(fā)燒友網(wǎng)為你提供Cortex-M3的異常和中斷資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-22 08:51 ?4次下載
    <b class='flag-5'>Cortex-M3</b>的異常和<b class='flag-5'>中斷</b>資料下載

    Cortex-M3Cortex-M4 Fault異常應(yīng)用之基礎(chǔ)知識(shí)資料下載

    電子發(fā)燒友網(wǎng)為你提供Cortex-M3Cortex-M4 Fault異常應(yīng)用之基礎(chǔ)知識(shí)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的
    發(fā)表于 04-23 08:50 ?10次下載
    <b class='flag-5'>Cortex-M3</b>和<b class='flag-5'>Cortex-M</b>4 Fault異常應(yīng)用之<b class='flag-5'>基礎(chǔ)知識(shí)</b>資料下載

    Cortex-M3工作模式、異常與中斷介紹資料下載

    電子發(fā)燒友網(wǎng)為你提供Cortex-M3工作模式、異常與中斷介紹資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-27 08:43 ?4次下載
    <b class='flag-5'>Cortex-M3</b>工作模式、異常與<b class='flag-5'>中斷</b><b class='flag-5'>介紹</b>資料下載

    STM32的NVIC與中斷簡(jiǎn)介&&Cortex-M內(nèi)核的識(shí)別

    實(shí)現(xiàn)編程的步驟。一 基礎(chǔ)知識(shí)1. cortex-m3支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷,240個(gè)外部中斷。(本博文只
    發(fā)表于 12-01 11:51 ?7次下載
    STM32的NVIC與<b class='flag-5'>中斷</b>簡(jiǎn)介&&<b class='flag-5'>Cortex-M</b>內(nèi)核的識(shí)別

    STM32 的核心Cortex-M3 處理器

    STM32的核心Cortex-M3 處理器是一個(gè)標(biāo)準(zhǔn)化的微控制器結(jié)構(gòu),希望思考一下,何為標(biāo)準(zhǔn)化?簡(jiǎn)言之,Cortex-M3 處理器擁有32 位CPU,并行總線結(jié)構(gòu),嵌套中斷向量控制單元,調(diào)試系統(tǒng)以及
    發(fā)表于 12-01 11:51 ?9次下載
    STM32 的核心<b class='flag-5'>Cortex-M3</b> 處理器

    Cortex-M4和Cortex-M3內(nèi)核的systick不進(jìn)中斷的軟件延時(shí)

    Cortex-M4和Cortex-M3內(nèi)核的systick不進(jìn)中斷的軟件延時(shí)Cortex-M3/4自帶的systick系統(tǒng)定時(shí)器在用作延時(shí)功能時(shí)常常會(huì)以
    發(fā)表于 12-01 11:51 ?3次下載
    <b class='flag-5'>Cortex-M</b>4和<b class='flag-5'>Cortex-M3</b>內(nèi)核的systick不進(jìn)<b class='flag-5'>中斷</b>的軟件延時(shí)

    什么是中斷架構(gòu)

    Cortex-M3內(nèi)核支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,并且具有256級(jí)的可編程中斷設(shè)置。但STM32并沒有使用
    的頭像 發(fā)表于 03-01 17:41 ?744次閱讀
    什么是<b class='flag-5'>中斷</b>架構(gòu)

    Cortex-M3中斷優(yōu)先級(jí)的相關(guān)知識(shí)

    本文詳細(xì)介紹Cortex-M3中斷優(yōu)先級(jí)相關(guān)知識(shí)。
    的頭像 發(fā)表于 03-23 11:45 ?2525次閱讀
    <b class='flag-5'>Cortex-M3</b><b class='flag-5'>中斷</b>優(yōu)先級(jí)的相關(guān)<b class='flag-5'>知識(shí)</b>