嵌入式Linux应用开发-基础知识-第十七章异常与中断的概念及处理流程

嵌入式Linux应用开发-基础知识-第十七章异常与中断的概念及处理流程

  • 第十七章 异常与中断的概念及处理流程
    • 17.1 中断的引入
      • 17.1.1 妈妈怎么知道孩子醒了
      • 17.1.2 嵌入系统中也有类似的情况
    • 17.2 中断的处理流程
    • 17.3 异常向量表
    • 17.4 参考资料

第十七章 异常与中断的概念及处理流程

在这里插入图片描述

在Linux开发中,异常和中断是操作系统中非常重要的概念。它们都是处理器在运行时遇到特殊情况时触发的事件,但是它们有一些不同之处。

  1. 异常(Exception):异常是由程序执行时发生的问题引起的,这种问题通常与程序的错误有关。例如,当程序尝试除以零或访问无效的内存地址时,就会发生异常。当处理器检测到异常时,它会停止当前程序的执行,并将控制权转移到操作系统内核的异常处理程序。如果异常处理程序能够解决问题并返回控制权给原程序,则程序可以继续执行。否则,程序可能会终止并产生错误消息。
  2. 中断(Interrupt):中断是由硬件设备发出的信号,通知操作系统有事件发生。例如,当用户按下键盘上的键或者定时器计时到达时,就会发生中断。与异常不同,中断是异步事件,处理器在任何时刻都可能接收到中断。当处理器接收到中断时,它会停止当前程序的执行,并将控制权转移到操作系统内核的中断处理程序。中断处理程序会根据事件类型执行相应的操作,例如读取键盘输入或处理计时器事件。在处理完中断后,处理器会将控制权返回给被中断的程序,使其继续执行。

异常和中断的处理流程如下:

  1. 处理器在运行时遇到异常或接收到中断信号。
  2. 处理器将当前程序的执行状态保存到内核栈中,以便在处理异常或中断后能够恢复执行状态。
  3. 处理器将控制权转移到操作系统内核的异常处理程序或中断处理程序。
  4. 异常处理程序或中断处理程序执行相应的操作来解决问题或处理事件。
  5. 处理程序返回控制权给被中断的程序,使其继续执行。

在Linux中,异常和中断的处理流程如下:

  1. 当处理器遇到异常或接收到中断信号时,它会将当前程序的执行状态保存到内核栈中。
  2. 处理器将控制权转移到Linux内核的异常处理程序或中断处理程序。
  3. 处理程序根据异常类型或事件类型执行相应的操作。
  4. 处理程序返回控制权给被中断的程序,使其继续执行。

需要注意的是,在Linux中,异常和中断的处理程序是由内核提供的,并且这些处理程序通常是用C语言编写的。因此,开发人员可以编写自己的内核模块来扩展Linux内核的功能,并编写自己的异常和中断处理程序来处理特定的事件。

处理器遇到异常/接收中断 --> 保存处理器状态到内核栈 --> 转移控制权到内核的异常/中断处理程序 --> 处理程序处理异常/中断 --> 恢复被中断的程序的执行/终止程序并生成错误报告

17.1 中断的引入

17.1.1 妈妈怎么知道孩子醒了

妈妈怎么知道卧室里小孩醒了?
在这里插入图片描述

① 时不时进房间看一下:查询方式
简单,但是累
② 进去房间陪小孩一起睡觉,小孩醒了会吵醒她:休眠-唤醒
不累,但是妈妈干不了活了
③ 妈妈要干很多活,但是可以陪小孩睡一会,定个闹钟:poll方式 要浪费点时间,但是可以继续干活。
妈妈要么是被小孩吵醒,要么是被闹钟吵醒。
④ 妈妈在客厅干活,小孩醒了他会自己走出房门告诉妈妈:异步通知 妈妈、小孩互不耽误。
后面的 3种方式,都需要“小孩来中断妈妈”:中断她的睡眠、中断她的工作。
实际上,能“中断”妈妈的事情可多了:
① 远处的猫叫:这可以被忽略
② 门铃、小孩哭声:妈妈的应对措施不一样 ③ 身体不舒服:那要赶紧休息
④ 有蜘蛛掉下来了:赶紧跑啊,救命
在这里插入图片描述

妈妈当前正在看书,被“中断”后她会怎么做?流程如下:
① 妈妈正在看书
② 发生了各种声音
可忽略的远处猫叫
快递员按门铃
卧室中小孩哭了
③ 妈妈怎么办?
a. 先在书中放入书签,合上书
b. 去处理
对于不同的情况,处理方法不同: 对于门铃:开门取快递
对于哭声:照顾小孩
c. 回来继续看书

17.1.2 嵌入系统中也有类似的情况

在这里插入图片描述

CPU在运行的过程中,也会被各种“异常”打断。这些“异常”有:
① 指令未定义
② 指令、数据访问有问题
③ SWI(软中断)
④ 快中断
⑤ 中断

中断也属于一种“异常”,导致中断发生的情况有很多,比如:
① 按键
② 定时器
③ ADC转换完成
④ UART发送完数据、收到数据
⑤ 等等
这些众多的“中断源”,汇集到“中断控制器”,由“中断控制器”选择优先级最高的中断并通知 CPU。

17.2 中断的处理流程

arm对异常(中断)处理过程:
① 初始化:
a. 设置中断源,让它可以产生中断
b. 设置中断控制器(可以屏蔽某个中断,优先级) c. 设置CPU总开关(使能中断)
② 执行其他程序:正常程序
③ 产生中断:比如按下按键—>中断控制器—>CPU
④ CPU 每执行完一条指令都会检查有无中断/异常产生
⑤ CPU发现有中断/异常产生,开始处理。
对于不同的异常,跳去不同的地址执行程序。
这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。
③④⑤都是硬件做的。
⑥ 这些函数做什么事情?
软件做的:
a. 保存现场(各种寄存器) b. 处理异常(中断):
分辨中断源,再调用不同的处理函数 c. 恢复现场

17.3 异常向量表

u-boot或是 Linux内核,都有类似如下的代码:

_start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq //发生中断时,CPU跳到这个地址执行该指令 **假设地址为 0x18** ldr pc, _fiq 

这就是异常向量表,每一条指令对应一种异常。
发生复位时,CPU就去 执行第 1条指令:b reset。
发生中断时,CPU就去执行“ldr pc, _irq”这条指令。
这些指令存放的位置是固定的,比如对于 ARM9芯片中断向量的地址是 0x18。
当发生中断时,CPU就强制跳去执行 0x18处的代码。
在向量表里,一般都是放置一条跳转指令,发生该异常时,CPU就会执行向量表中的跳转指令,去调用更复杂的函数。
当然,向量表的位置并不总是从 0地址开始,很多芯片可以设置某个 vector base寄存器,指定向量表在其他位置,比如设置 vector base为 0x80000000,指定为 DDR的某个地址。但是表中的各个异常向量的偏移地址,是固定的:复位向量偏移地址是 0,中断是 0x18。

17.4 参考资料

对于 ARM的中断控制器,述语上称之为 GIC (Generic Interrupt Controller),到目前已经更新到 v4版本了。
各个版本的差别可以看这里:
https://developer.arm.com/ip-products/system-ip/system-controllers/interrupt-controllers
简单地说,GIC v3/v4用于 ARMv8 架构,即 64位 ARM芯片。 而 GIC v2用于 ARMv7和其他更低的架构。
以后在驱动大全里讲解中断时,我们再深入分析,到时会涉及单核、多核等知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144322.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】快速排序

文章目录 一、hoare版本二、挖坑法三、前后指针法四、非递归快排五、快速排序优化1、三数取中选key值2、小区间优化 六、代码测试 一、hoare版本 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素…

今天刷到一条有用的抖音---网站文档copy的解禁

有的时候在网上查找一些资料,发现些有用的东西的时候,兴高采烈的复制一下,然后网站弹出一个菜单让你付钱~~如下图: 此时,可以在该网页上,按F12,召唤出调试窗口,在事件监听器中&#…

美国零售电商平台Target,值得入驻吗?如何入驻?

Target 是美国最大的零售商之一,在品牌出海为大势所趋的背景下,它在北美电商中的地位节节攀升。Target 商店在众多垂直领域提供各种价格实惠的自有品牌,吸引越来越多的跨境商家入驻,如美妆、家居、鞋服、日用百货等,随…

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义 文章目录 I2C协议I2C配置I2C操作判断I2C是否响应I2C读写 附录:Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总…

Python爬虫教程——解析网页中的元素

前言: 嗨喽~大家好呀,这里是小曼呐 ~ 在我们理解了网页中标签是如何嵌套,以及网页的构成之后, 我们就是可以开始学习使用python中的第三方库BeautifulSoup筛选出一个网页中我们想要得到的数据。 接下来我们了解一下爬取网页信息…

基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2015/CEC2018/CEC2023(MATLAB代码)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法(Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

高速数字化仪为您带来高效RF测量秘籍!

模块数字化仪能够以16 bit高分辨率采集2 GHz带宽的RF信号。虹数字化仪能够使用许多RF和较低频率微波的测试。本文重点介绍使用虹科数字化仪进行RF测量相关内容。 高数据通量测试 基于多通道PCIe的数字化仪,可以以高达12.8 GBytes/s的速度传输数据,从而…

云中网络的隔离GREVXLAN

底层的物理网络设备组成的网络我们称为 Underlay 网络,而用于虚拟机和云中的这些技术组成的网络称为 Overlay 网络,这是一种基于物理网络的虚拟化网络实现。 第一个技术是 GRE,全称 Generic Routing Encapsulation,它是一种 IP-o…

Serverless 数仓技术与挑战(内含 PPT 下载)

近期,Databend Labs 联合创始人张雁飞发表了题为「Serverless 数仓技术与挑战」的主题分享。以下为本次分享的精彩内容: 主题: 「Serverless 数仓技术与挑战」 演讲嘉宾: 张雁飞 嘉宾介绍: Databend Labs 联合创始人…

c++迷宫小游戏

一、总结 一句话总结: 显示:根据map数组输出图像 走动:修改map数组的值,每走一步重新刷新一下图像就好 1、如果走函数用z(),出现输入s会向下走多步的情况,原因是什么? 向下走两层循环ij增加&a…

openlayers-18-聚合显示补充(切换聚合与非聚合状态)

最近有一些网友问我&#xff0c;聚合显示怎么实现聚合与不聚合之间的切换&#xff0c;有很多方法能够实现&#xff0c;下面是一个示例作为参考。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-…

LabVIEW开发低成本静脉监测和控制输液系统

LabVIEW开发低成本静脉监测和控制输液系统 信息技术的使用和进步彻底改变了现代医疗保健的面貌。医院、疗养院和其他姑息治疗院需要不同的人力资源&#xff0c;如医生、技术人员、护士和其他工作人员&#xff0c;他们共同提供最先进的医疗保健。COVID-19大流行表现出严重缺乏此…

【Linux学习】04Linux实用操作

Linux&#xff08;B站黑马&#xff09;学习笔记 01Linux初识与安装 02Linux基础命令 03Linux用户和权限 04Linux实用操作 文章目录 Linux&#xff08;B站黑马&#xff09;学习笔记前言04Linux实用操作各类小技巧&#xff08;快捷键&#xff09;ctrl c 强制停止ctrl d 退出或…

MySQL - group by分组查询 (查询操作 三)

功能介绍 group by: 对数据进行分组和聚合操作(可以操作单字段和多字段) having&#xff1a;过滤group by的结果&#xff0c;也就是在分组后添加筛选条件 基础语法 select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having ]; where 和 having的区…

ROS系统通过类定义实现数据处理并重新发布在另一话题

在实际应用中&#xff0c;经常需要在同一个节点内接受数据&#xff0c;在回调函数中将数据进行处理&#xff0c;再将新数据重新发布在另一个新话题上。 实现步骤&#xff1a; 1. 定义一个数据处理类SubscribeAndPublish&#xff0c;设置2个pub成员对象和1个sub成员对象为publ…

Mysql生产随笔

目录 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 1.2常见错误解决方案 2.关于时区 3.内存占用优化 记录一下生产过程中的一些场景和命令使用方法&#xff0c;不定期进行更新 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 sho…

安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤【二】

​​​​​​安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 低版本可以参考上个博文了解相关安装方法。 LSP框架优点 简单来说装lsp框架的优点在于可以安装各种模块。包括 但不限于系统优化 加速 游戏开挂等等的模块。大致相当于电脑的扩展油猴 Lspos…

【Linux】线程安全

线程互斥互斥相关背景概念 互斥量mutex互斥量接口初始化互斥量函数销毁互斥量互斥量加锁互斥量解锁代码模拟 互斥量实现的逻辑常见锁的概念死锁什么叫做阻塞&#xff1f;产生死锁的四个必要条件如何避免死锁 Linux线程同步同步概念与竞态条件条件变量条件变量函数代码练习 条件…

HC32 IIC/I2C读写

IIC状态码 IIC 初始化 void iicInit(uint32_t speed) {stc_gpio_cfg_t stcGpioCfg;DDL_ZERO_STRUCT(stcGpioCfg);Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //开启GPIO时钟门控stcGpioCfg.enDir GpioDirOut; ///< 端口方向配置…

记录使用iText7查找PDF内容关键字坐标,加盖电子签名、印章

一、前言 项目以前签字都是由C端那边进行合成操作&#xff0c;最近项目要求把那块功能&#xff0c;由后端进行实现&#xff0c;其中包含坐标、关键字、任意位置进行签字操作&#xff0c;坐标是最容易实现的&#xff0c;曾经也写过类似的功能在&#xff08;添加图片印章到PDF&a…