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

news2024/11/26 19:38:25

嵌入式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.coloradmin.cn/o/1049184.html

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

相关文章

数据结构---课后习题(第一章)

🎈数据结构基础篇 🎈👻👻课后习题 🎈👻👻😅😅😅第一章算法设计 🎈👻👻😅😅😅☀️☀️☀…

Linux和本地Windows如何互传文件(sz和rz指令)

目录 关于 rzsz 注意事项 安装软件 rz的使用(本地主机文件传到Windows中) sz的使用(Linux中的文件传到本地Windows主机中) 关于 rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件. 安装完毕之后可以通过直接拖拽的方式将文件…

景联文数据标注:AI大模型产生幻觉该如何应对?

大语言模型在诸多下游任务中展现出令人瞩目的能力,然而在运用过程中仍然存在一些问题。幻觉现象是目前阻碍大模型成功应用的关键问题之一。 什么是大模型幻觉问题? 大模型幻觉问题是指一些人工智能模型在面对某些输入时,会生成不准确、不完整…

高效搜索,提升编程效率

一、搜索效率 1.1魔法上网 网址: 一个很变态但可以让你快速学会计算机的方法…………_哔哩哔哩_bilibili 谷歌镜像: https://search.fuyeor.com/zh-cn/Google 谷歌学术: https://link.zhihu.com/?targethttps%3A//scholar.lanfanshu.cn/…

常用SQL语法总结

1.库操作 1.1.创建数据库 CREATE DATABASE 语句用来创建一个新的数据库。 语法:CREATE DATABASE DatabaseName; DatabaseName 为数据库名字,它的名字必须是唯一的,不能和其它数据库重名。 1.2.删除数据库 DROP DATABASE语句用来删除已经…

notepad++堆缓冲区溢出漏洞CVE-2023-40031分析与复现

漏洞概述 Notepad 是一款知名的开源代码编辑器,运行系统为Windows,支持多种编程语言。近日,安全研究人员针对 Notepad进行检查,发现了不少安全漏洞。其中评分为 7.8 分(CVSS3,总分10分)的堆缓冲…

全球与中国静音发电机市场:增长趋势、竞争格局与前景展望

静音发电机是一种设计用于减少噪音水平的发电机,通常被称为低噪音发电机或静音发电机组。这些发电机被特别设计,以降低发电运行时产生的声音,以满足对噪音控制和环境友好性的需求。 噪音控制技术:静音发电机通常采用各种噪音控制技…

51单片机控制电动机正反转,PWM调速,记录转动圈数。

今天的实验需要用到的材料有:51单片机最小系统,4X4的矩阵键盘,DC直流6V-12V带编码器电机,L298N模块,一个led小灯。下面把产品截图展示一下: 单片机就不展示了,都一样,下面是接线图&a…

【Linux学习】04Linux实用操作

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

手把手教你制作精美的新店开业微传单

如果你准备开设一家新店,那么制作一份具有吸引力的微传单是宣传店铺的重要手段之一。下面,我们将通过乔拓云平台,手把手教你制作一份有吸引力的新店开业微传单。 1. 注册并登录乔拓云账号 首先,你需要在乔拓云官方网站注册一个账号…

麒麟信安服务器操作系统V3.5.2重磅发布!

9月25日,麒麟信安基于openEuler 22.03 LTS SP1版本的商业发行版——麒麟信安服务器操作系统V3.5.2正式发布。 麒麟信安服务器操作系统V3定位于电力、金融、政务、能源、国防、工业等领域信息系统建设,以安全、稳定、高效为突破点,满足重要行…

​分拆菜鸟将使阿里巴巴股票迎来新一轮上涨?

来源:猛兽财经 作者:猛兽财经 总结: (1)阿里巴巴(BABA)最近公布的季度财报显示,该公司有能力实现快速盈利。 (2)据报道,阿里巴巴正计划分拆菜鸟集团,并将在香…

JavaScript高阶班之ES6 → ES11(八)

JavaScript高阶班之ES6 → ES11 1、ES6新特性1.1、let 关键字1.2、const关键字1.3、变量的解构赋值1.3.1、数组的解构赋值1.3.2、对象的解构赋值 1.4、模板字符串1.5、简化对象写法1.6、箭头函数1.7、函数参数默认值1.8、rest参数1.9、spread扩展运算符1.9.1、数组合并1.9.2、数…

瀑布流布局

效果&#xff1a; 代码&#xff1a; APP.vue <template><waterFallVue :list"list"></waterFallVue> </template> <script setup> import waterFallVue from "./components/waterFallVue .vue"const list [{height: 300,…

欧洲FBA专线海运与陆运的差别

随着全球电商市场的快速发展&#xff0c;越来越多的卖家选择将产品销售到欧洲市场。然而&#xff0c;面对欧洲境内的物流问题&#xff0c;卖家们往往会面临一个重要的选择&#xff1a;选择欧洲FBA专线时是选择海运还是陆运?这两种运输方式在时效、成本和服务质量上都有所不同&…

练习敲代码速度/提高打字速度

今天看到一个敲代码的视频&#xff0c;说的是不要用你的爱好来挑战程序员的职业。 惭愧&#xff0c;我也是程序员&#xff0c;但打字还真的没那么快&#xff0c;尤其是数字键盘&#xff0c;以前敲不准&#xff0c;十几年了也没在意&#xff0c;毕竟很少用。直接用右边小键盘更…

基于web的学校二手书城系统/二手书交易系统

摘 要 本文论述了学校二手书城系统的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;网络和Mysql数据库设计来实现的&#xff0c;网站主要包括用户注册、用户登录、浏览图书、搜索图书、查看图书并进行购买…

简单易上手的在windows部署cmake版paddledetection/yolo(c++)

一.下载源代码 官方地址&#xff1a; https://gitee.com/paddlepaddle/PaddleDetection 网盘&#xff1a; paddledetection 链接&#xff1a;https://pan.baidu.com/s/1g0z5SYQNDR1pwe9iAtvR3A?pwdktl6 提取码&#xff1a;ktl6 paddleocr 链接&#xff1a;https://pan.baid…

数码配件商城搭建教程:一步一步实现自己的小程序商城

在如今数字化的时代&#xff0c;电子商务成为了一种非常重要的商业模式。而随着移动互联网的发展&#xff0c;小程序商城成为了许多企业和个人创业者的选择。本文将介绍如何使用乔拓云平台搭建一个数码配件商城的小程序&#xff0c;并实现自己的商业梦想。 第一步&#xff1a;登…

raw图片处理推荐 DxO PhotoLab 6 for Mac中文最新

DxO PhotoLab 6是一款专业的RAW图片处理软件&#xff0c;适用于Mac操作系统。它具有先进的图像处理技术和直观易用的界面&#xff0c;可帮助用户轻松地将RAW格式的照片转换为高质量的JPEG或TIFF图像。以下是对DxO PhotoLab 6软件的详细介绍&#xff1a; RAW图像处理&#xff1…