中断管理学习

2023-12-16

中断管理

什么是中断?简单的解释就是系统正在处理某一个正常事件,忽然被另一个需要马上处理的紧急事件打断,系统转而处理这个紧急事件,待处理完毕,再恢复运行刚才被打断的事件。生活中,我们经常会遇到这样的场景:

当你正在专心看书的时候,忽然来了一个电话,于是记下书的页码,去接电话,接完电话后接着刚才的页码继续看书,这是一个典型的中断的过程。

电话是老师打过来的,让你赶快交作业,你判断交作业的优先级比看书高,于是电话挂断后先做作业,等交完作业后再接着刚才的页码继续看书,这是一个典型的在中断中进行任务调度的过程。

这些场景在嵌入式系统中也很常见。
当CPU正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前工作转去处理异步事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。

实现这一功能的系统称为中断系统,申请CPU中断的请求源称为中断源。中断是一种异常,异常是导致处理器脱离正常运行转向执行特殊代码的任何事件,如果不及时进行处理,轻则系统出错,重则导致系统毁灭性瘫痪。

所以正常地处理异常,避免错误的发生是提高软件鲁棒性非常重要的一环。

在这里插入图片描述

Cortex-M CPU架构基础

不同于老的经典ARM处理器(例如,ARM7,ARM9)。
ARM Cortex-M处理器有一个非常不同的架构,Cortex-M是一个家族系列,其中包括Cortex M0/M3/4/7多个不同型号,每个型号之间会有些区别。
例如,Cortex-M4比Cortex-M3多了浮点计算功能,但它们的编程模型基本一致。

寄存器简介

Cortex-M系列CPU的寄存器组里有R0~R15共16个通用寄存器和若干特殊功能寄存器。

通用寄存器组里的R13作为堆栈指针寄存器(Stack Pointer,SP),其中堆栈指针寄存器可以是主堆栈指针(MSP),也可以是进程堆栈指针(PSP)。
R14作为连接寄存器(Link Register,LR),用于在调用子程序时,存储返回地址。
R15作为程序计数器(Program Counter,PC)。
在这里插入图片描述
特殊功能寄存器包括程序状态字寄存器组(PSRs)、中断屏蔽寄存器组(PRIMASK,FAULTMASK,BASEPRI)、控制寄存器(CONTROL),可以通过MSR/MRS指令来访问特殊功能寄存器,例如、

MRS R0,CONTROL;读取CONTROL到R0中。
MSR CONTROL,RO; 写入R0到CONTROL寄存器中

程序状态字寄存器里保存算术逻辑标志,例如负数标志,零结果标志,溢出 标志等等。
中断屏蔽寄存器组控制Cortex-M的中断除能。
控制寄存器用来定义特权级别和当前使用哪个堆栈指针。

如果是具有浮点单元的Cortex-M4或M7,控制寄存器也用来指示浮点单元当前是否在使用,浮点单元包含了 32 个浮点通用寄存器 S0~S31 和特殊 FPSCR 寄存器(Floating point status and control register)。

操作模式和特权级别

操作模式:分别为线程模式和处理模式。
如果进入异常或中断处理则进入处理模式,其它情况则为线程模式。

Cortex-M有两个运行级别,分别为特权级和用户级,线程模式可以工作在特权级或者用户级,而处理模式总工作在特权级,可通过CONTROL特殊寄存器控制。

嵌套向量中断控制块

Cortex-M中断控制器名为NVIC(嵌套向量中断控制器),支持 中断嵌套功能。

当一个中断触发并且系统进行响应时,处理器硬件会将当前运行位置的上下文寄存器自动压入中断栈中,这部分的寄存器包括PSR、PC、LR、R12、R3-R0寄存器。
在这里插入图片描述
当系统正在服务一个中断时,如果有一个更高优先级的中断触发,那么处理器同样会打断当前运行的中断服务程序,然后把这个中断服务程序上下文的 PSR、PC、LR、R12、R3-R0 寄存器自动保存到中断栈中。

PendSV系统调用

PendSV称为可悬起的系统调用,它是一种异常,可以像普通的中断一样被挂起,它是专门用来辅助操作系统进行上下文切换的。

PendSV异常会被初始化为最低优先级的异常。每次需要进行上下文切换的时候,会手动触发PendSV异常,在PendSV异常处理函数中进行上下文切换。

中断向量表

中断向量表是所有中断处理程序的入口,把用户中断服务程序与中断向量表中的中断向量联系在一起。当中断向量对应中断发生的时候,被挂接的用户中断服务程序就会被调用执行。

在这里插入图片描述
在Cortex-M内核上,所有中断都采用中断向量表的方式进行处理,即当一个中断触发时,处理器将直接判定是哪个中断源,然后直接跳转到相应的固定位置进行处理,每个中断服务程序必须排列在一起放在统一的地址上。

  __Vectors     DCD     __initial_sp             ; Top of Stack
                DCD     Reset_Handler            ; Reset 处理函数
                DCD     NMI_Handler              ; NMI 处理函数
                DCD     HardFault_Handler        ; Hard Fault 处理函数
                DCD     MemManage_Handler        ; MPU Fault 处理函数
                DCD     BusFault_Handler         ; Bus Fault 处理函数
                DCD     UsageFault_Handler       ; Usage Fault 处理函数
                DCD     0                        ; 保留
                DCD     0                        ; 保留
                DCD     0                        ; 保留
                DCD     0                        ; 保留
                DCD     SVC_Handler              ; SVCall 处理函数
                DCD     DebugMon_Handler         ; Debug Monitor 处理函数
                DCD     0                        ; 保留
                DCD     PendSV_Handler           ; PendSV 处理函数
                DCD     SysTick_Handler          ; SysTick 处理函数

… …

NMI_Handler             PROC
                EXPORT NMI_Handler              [WEAK]
                B       .
                ENDP
HardFault_Handler       PROC
                EXPORT HardFault_Handler        [WEAK]
                B       .
                ENDP
… …

[WEAK]标识,是符号弱化标识,如果整个代码在链接时遇到了名称相同的符号,那么代码将使用未被弱化定义的符号。

中断处理过程

RT-Thread中断管理中,将中断处理程序分为中断前导程序、用户中断服务程序、中断后继程序三部分。
在这里插入图片描述
中断前导程序
保存CPU中断现场,这部分跟CPU架构相关,不同CPU架构的实现方式有差异。

对于Cortex-M来说,该工作由硬件自动完成。当一个中断触发并且系统进行响应时,处理器硬件会将当前运行部分的上下文寄存器自动压入中断栈中,这部分的寄存器包括PSR、PC、LR、R12、R3-R0寄存器。

通知内核进入中断状态,调用rt_interrupt_enter()函数,把全局变量rt_interrupt_nest加1,用来记录中断嵌套的层数。

void rt_interrupt_enter(void)
{
	rt_base_t level;
	level = rt_hw_interrupt_disable();
	rt_interrupt_nest++;
	rt_hw_interrupt_enable(level);
}

用户中断服务程序

在用户中断服务程序(ISR)中,分为两种情况,第一种情况是不进行线程切换,这种情况下用户中断服务程序和中断后续程序运行完毕后,退出中断模式,返回被中断的线程。

另一种情况是,在中断处理过程中需要进行线程切换,这种情况会调用rt_hw_context_switch_interrupt()函数进行上下文切换,该函数跟CPU架构相关,不同CPU架构的实现方式有差异。

在Cortex-M架构中,rt_hw_context_switch_interrupt()的函数实现流程如图所示
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中断管理学习 的相关文章

  • 【无标题】

    一 软件简介 PyCharm是一款Python IDE 其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具 比如 调试 语法高亮 Project管理 代码跳转 智能提示 自动完成 单元测试 版本控制等等 此外 该IDE提供
  • WPF中DataGrid设置默认选中行

    1 DataGrid命名为planDataGrid
  • 如何FL Studio显示中文?切换语言教程

    你是不是也在为fl studio的英文界面而苦恼 你是不是也想让你的fl studio 说中文 方便你制作音乐 你是不是也在网上找了很多教程 却发现都是复杂的 或者已经过时的 如果你的答案是肯定的 那么你来对地方了 今天 我要教你一个一步到
  • CleanMyMac X这一款mac电脑清理垃圾文件软件好用吗?

    CleanMyMac X您的 Mac 极速如新 点按一下 即可优化调整整个 Mac畅享智能扫描 这款超级简单的工具用于优化您的 Mac 只需点按一下 即可运行所有任务 让您的 Mac 保持干净 快速并得到最佳防护 CleanMyMac 是一
  • 【git教程】

    目录 git与SVN的区别 集中式与分布式的区别 Windows上安装Git 创建版本库 仓库 repository 将文件添加到repository 报错处理 查看仓库的状态 版本回退 工作区和暂存区 管理
  • EasyRecovery2024国内免费的电脑数据恢复软件(一键备份还原)

    EasyRecovery2024是coco玛奇朵Ontrack 的技术杰作 它是一个硬盘数据恢复工具 能够帮你恢复丢失的数据以及重建文件系统 其 Professioanl 专业 版更是囊括了磁盘诊断 数据恢复 文件修复 E mail 修复等

随机推荐

  • FL Studio2024年最新中文版本如何下载?

    FL Studio是款专业的音频录制编辑软件 受到了广大制作人的喜爱 但有很多人不知道FL Studio应该如何使用 和小编一起往下看吧 FL Studio是款专业的音频录制编辑软件 可以针对作曲者的要求编辑出不同音律的节奏 例如鼓 镲 锣
  • fl studio2024中文版下载安装教程 亲测有效

    fl studio是一款功能强大的编曲软件 今天小编就为大家带来了详细的安装教程 需要的朋友一起看看吧 fl studio2024是一款功能强大的编曲软件 也就是众所熟知的水果软件 它可以编曲 剪辑 录音 混音 让您的计算机成为全功能录音室
  • CleanMyMac X2024值不值得下载?

    macOS已经成为最受欢迎的桌面操作系统之一 它提供了直观 简洁的用户界面 使用户可以轻松使用和管理系统 macOS拥有丰富的应用程序生态系统 还可以与其他苹果产品和服务紧密协作 如iPhone iPad 用户可以通过iCloud同步和共享
  • FL Studio水果软件最新版本号V21.0.3.3517内置中文补丁,可以切换成中文界面。

    FL Studio 21 0 3 3517 Producer Edition 全称Fruity Loops Studio 21 Producer Edition 就是大家熟悉的水果编曲软件 一个全能的音乐制作软件 包括编曲 录音 剪辑和混音
  • CorelDRAW2024好不好用?比其他矢量图设计软件有哪些优势

    CorelDRAW作为一款专业的矢量设计图软件 备受招聘公司 业内人士青睐 CorelDRAW是一款广泛应用于图形设计 图像编辑和排版的软件 其强大的功能和灵活性使其在设计师和艺术家中备受欢迎 然而 在进行CorelDRAW账户注册时 一些
  • EasyRecovery(数据恢复软件) 2024中文绿色无需激活版下载

    EasyRecovery 是一款功能强大且专业的数据恢复软件 软件能够对电脑误删的文件进行恢复 包括格式化硬盘是数据恢复 手机U盘数据恢复等 小编今天给大家带来的是根据官软件解压后直接使用 感兴趣的朋友快来下载使用吧 EasyRecover
  • FL Studio20官方版怎么下载安装?2024最新版图文详细教程

    水果音乐制作软件FL Studio2024是一款功能强大的软件音乐制作环境或数字音频工作站 DAW 本文主要针对FL Studio 2024怎么安装 来为大家带来了水果软件FL Studio 2024安装图文详细教程 水果音乐制作软件FL
  • CorelDRAW2024中文版怎么免费下载?

    CorelDRAW是一款综合性强大的专业平面设计软件 其功能覆盖了矢量图形设计 高级文字编辑 精细绘图以及多页文档和页面设计 该软件不仅适用于广告设计 包装设计 还广泛应用于出版 网页设计和多媒体制作等多个领域 下面就给大家介绍一下Core
  • 操作系统内部机制学习

    切换线程时需要保存什么 函数需要保存吗 函数在Flash上 不会被破坏 无需保存 函数执行到了哪里 需要保存吗 需要保存 全局变量需要保存吗 全局变量在内存上 无需保存 局部变量需要保存吗 局部变量在栈里 也是在内存里 只要避免栈不会被破坏
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • CorelDRAW2024版本什么时候更新?有哪些新功能

    CorelDRAW2024 简称CDR 是一款专业的图形设计软件 该软件是加拿大Corel公司开发的一款功能强大的专业平面设计软件 矢量设计软件 矢量绘图软件 这款矢量图形制作工具软件广泛应用于商标设计 标志制作 封面设计 CIS设计 产品
  • BSP制作

    STM32系列驱动介绍 在RT Thread实时操作系统中 各种各样的设备驱动是通过一套I O设备管理框架来实现的 设备管理框架给上层应用提供了一套标准的设备操作API 开发者通过调用这些标准设备操作API 可以高效地完成和底层硬件外设的交
  • 正则表达式的资源

    https www regular expressions info index html https regex101 com
  • UART设备

    UART简介 UART Universal Asynchronous Receiver Transmitter 通用异步收发传输器 UART作为异步串口通信协议的一种 工作原理是将传输数据的每个字符一位接一位地传输 是在应用程序开发过程中使
  • 欧盟eDelivery的AS4解决方案

    为实现绿色和数字欧洲的愿景 欧盟启动了 数字欧洲计划 DEP 总预算为75 9亿欧元 重点是将数字技术带给企业 公民和公共行政部门 它将建立数字能力和基础设施 并以创建数字市场为目标 主要通过与成员国在先进计算和数据 人工智能和网络安全 私
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R
  • PIN设备

    引脚简介 芯片上的引脚一般分为4类 电源 时钟 控制与I O I O在使用模式上又分为General Purpose Input Output 通用输入 输出 简称GPIO 与功能复用I O 如SPI I2C UART 大多数MCU的引脚都
  • CleanMyMac X2024免费许可证(激活教程)

    CleanMyMac X是一款流行的系统优化工具 专为Mac用户设计 它可以帮助用户清理Mac系统中的垃圾文件 卸载不需要的程序 加速Mac性能以及保护Mac系统的安全 一 简介 CleanMyMac X是一款功能强大的系统优化工具 它可以
  • 中断管理学习

    中断管理 什么是中断 简单的解释就是系统正在处理某一个正常事件 忽然被另一个需要马上处理的紧急事件打断 系统转而处理这个紧急事件 待处理完毕 再恢复运行刚才被打断的事件 生活中 我们经常会遇到这样的场景 当你正在专心看书的时候 忽然来了一个