0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Cortex-M3咬尾中断与晚到中断基础知识介绍

冬至子 来源:AI电堂 作者:电小二 2023-11-06 16:36 次阅读

咬尾中断

Cortex-M3 内核发生中断时,硬件会自动将 XPSR、PC、LR、R12、R3、R2、R1 和 R0 这 8 个寄存器压入栈,其余的 R4~R11、LR、XPSR 寄存器的备份则需要由 C 编译器去做。

我们知道每次中断操作有三部曲:入栈+ISR+出栈。**Cortex-M3 内核支持中断嵌套。所谓中断嵌套就是高优先级的中断可以打断低优先级的中断转而去执行高优先级的中断服务程序,当高优先级中断服务程序执行完毕再去接着执行低优先级的中断服务程序。

若在高优先级中断服务程序执行过程中产生了低优先级中断,那么低优先级中断需要等高优先级中断服务程序执行完毕才能去执行。

对于后者两个中断是串行执行的,如果按照每个中断备份、恢复寄存器的过程,那么高优先级中断先将上述 8 个寄存器压入栈中,等执行完毕再从栈中弹出这 8 个寄存器,紧接着低优先级中断再将这 8 个寄存器压入栈中,等执行完毕再从栈中弹出,这么做对这 8 个寄存器重复入栈出栈 2 次,浪费了时间,Cortex-M3 内核采用咬尾中断机制避免这种问题发生,来看下图:

图片

Cortex-M3不会再出栈这些寄存器,而是继续使用上一个异常已经压栈好的结果,消除出栈和入栈操作的耗时。这样一来我们执行两次中断只需要:入栈+ISR1+ISR2+出栈。

咬尾中断看上去好像后一个异常把前一个的尾巴咬掉了,前前后后只执行了一次PUSH/POP操作。这两个异常之间的“时间沟”就变窄了很多,大大提高了效率!

与常规中断处理(ARM7)的比较:

图片

晚到中断

Cortex-M3的中断处理还有另一个机制,它强调了优先级的作用,这就是 “晚到的异常处理”

这里有一种情况,低优先级中断先发生,而在低优先级中断压栈的过程中又发生了高优先级的中断,这时高优先级中断就会抢占低优先级中断,如果高优先级中断再压栈然后执行,再出栈,低优先级中断执行再出栈,这样对这 8 个寄存器又是重复入栈出栈 2 次,做了无用功,Cortex-M3 内核采用晚到中断机制避免这种问题发生,来看下图:

比如,若在响应某低优先级异常#1的早起,检测到了高优先级异常#2,则只要#2没有太晚,就能以“晚到中断”的方式处理,在入栈完毕后执行ISR#2。如图所示:

图片

如果异常#2来得太晚,以至于已经执行了ISR#1的指令,则按普通的抢占处理,这会需要更多的处理器时间和额外32字节的堆栈空间。在ISR#2执行完毕后,则以“咬尾中断”的方式来启动ISR#1的执行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18288

    浏览量

    222185
  • 寄存器
    +关注

    关注

    30

    文章

    5032

    浏览量

    117746
  • Cortex-M3
    +关注

    关注

    9

    文章

    268

    浏览量

    59165
  • 中断优先级
    +关注

    关注

    0

    文章

    22

    浏览量

    9268
  • 中断嵌套
    +关注

    关注

    0

    文章

    5

    浏览量

    6772
收藏 人收藏

    评论

    相关推荐

    【图书分享】《ARM Cortex-M3权威指南》

    《ARM Cortex-M3权威指南》作  者:(英)姚文详,宋岩 译内容简介本书重点介绍了新的ARM架构、指令集的总结、硬件特性以及调试系统的概览。本书还提供了一些程序示例,并且在
    发表于 03-13 10:40

    【图书分享】Cortex-M3 + μC/OS-II嵌入式系统开发入门与应用

        2.5.2 SLEEPDEEP   2.6 嵌套向量中断控制器NVIC   2.7 存储器保护单位MPU   2.8 Cortex-M3开发平台——STM32V100评估板介绍  第3
    发表于 03-13 11:02

    不同优先级中断中处理时怎么理解

    处理中断时,怎么理解
    发表于 03-28 03:34

    Cortex-M3处理器是什么

    STM32单片机STM32的核心Cortex-M3处理器是一个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3处理器拥有32位CPU,并行总线结构,嵌套中断
    发表于 07-16 06:33

    STM32 的核心Cortex-M3 处理器是什么

    STM32的核心Cortex-M3 处理器是一个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3 处理器拥有32 位CPU,并行总线结构,嵌套中断向量控制单元,调试系统以及
    发表于 07-23 08:35

    Cortex-M3处理器中断与FreeRTOS中断优先级配置

    置顶/星标公众号,不错过每一条消息!很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断
    发表于 08-13 06:16

    STM32(Cortex-M3)中的优先级概念

    一、中断优先级:STM32(Cortex-M3)中的优先级概念STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个
    发表于 08-16 07:21

    ARM Cortex-M3中断体系

    外部中断一、ARM Cortex-M3中断体系二、代码思路函数接口1.为引脚选择使用哪个中断2.配置外部中断
    发表于 08-16 07:38

    GD32的外部中断介绍

    中断介绍◼ 高效的中断处理;◼ 支持异常抢占和中断;◼ 将系统从省电模式唤醒;◼
    发表于 08-16 08:36

    如何去实现在STM32/Cortex-M3中的开关总中断

    STM32(Cortex-M3)中的优先级有哪几种?如何去实现在STM32/Cortex-M3中的开关总中断呢?
    发表于 11-16 06:29

    探讨一下ARM Cortex-M3中断体系

    ARM Cortex-M3中断是何含义?STM32单片机的抢占优先级与响应优先级有何区别
    发表于 11-16 08:53

    STM32的核心Cortex-M3处理器的标准化是什么意思

    STM32的核心Cortex-M3处理器是一个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3处理器拥有32位CPU,并行总线结构,嵌套中断向量控制单元,调试系统以及标准
    发表于 12-06 07:53

    STM32的Cortex-M3中断异常处理

    在STM32处理器中有43个可屏蔽中断通道(不包含 16个 Cortex?-M3的中断线)。共设置了16个可编程的优先等级(使用了 4位中断优先级);它的嵌套向量
    发表于 11-16 15:35 7701次阅读
    STM32的<b class='flag-5'>Cortex-M3</b><b class='flag-5'>中断</b>异常处理

    Cortex-M4和Cortex-M3内核的systick不进中断的软件延时

    Cortex-M4和Cortex-M3内核的systick不进中断的软件延时Cortex-M3/4自带的systick系统定时器在用作延时功能时常常会以
    发表于 12-01 11:51 1次下载
    <b class='flag-5'>Cortex</b>-M4和<b class='flag-5'>Cortex-M3</b>内核的systick不进<b class='flag-5'>中断</b>的软件延时

    Cortex-M3中断优先级的相关知识

    本文详细介绍Cortex-M3中断优先级相关知识
    的头像 发表于 03-23 11:45 1467次阅读
    <b class='flag-5'>Cortex-M3</b><b class='flag-5'>中断</b>优先级的相关<b class='flag-5'>知识</b>