中断和异常的区别
- 格式:ppt
- 大小:796.00 KB
- 文档页数:77
单片机的中断与异常处理方法在单片机的工作过程中,中断和异常处理是非常重要的概念和方法。
它们能够有效地提高单片机的响应能力和灵活性,使其能够应对各种不同的工作需求和问题。
本文将介绍单片机中断的概念、中断的种类以及针对不同中断的处理方法,同时也会探讨单片机异常处理的原理和方法。
一、中断的概念和种类中断是指在一个程序执行的过程中,由于某种特殊的事件发生,导致程序的正常执行被打断,转而去执行一个与当前任务无关的子程序,完成该事件的相应处理。
中断可以分为外部中断和内部中断两种。
1. 外部中断外部中断是指当单片机外部引脚的电平或信号发生变化时,引发中断事件,使单片机停止当前任务的执行,去处理由该外部事件引发的中断服务程序(ISR)。
外部中断常用于与外部设备的交互,如按键输入、传感器检测等。
在编程中,我们可以通过设置中断触发条件和编写相应的中断服务程序来实现对外部中断的处理。
2. 内部中断内部中断是指当单片机内部某个特定的事件发生时,由硬件或软件触发中断请求,并且将控制权交给中断服务程序进行相应的处理。
内部中断的发生可以是由于某个特定条件的满足,如定时器溢出中断、串口接收中断等;也可以是由软件的运行结果触发,如除法溢出中断、地址错误中断等。
不同的内部中断需要通过编程实现相应的中断服务程序。
二、中断的处理方法中断处理是指在中断发生时,单片机通过中断向量表找到相应的中断服务程序,并对中断事件进行处理的过程。
下面将介绍两种常用的中断处理方法。
1. 优先级中断处理优先级中断处理是指对多个中断源按照优先级进行划分和处理的方法。
在单片机的中断系统中,每个中断源都被赋予了一个优先级,高优先级的中断可以打断当前正在执行的低优先级中断,从而增加了中断的响应速度和灵活性。
优先级中断处理需要在编程时设置中断的优先级,并根据不同的中断事件编写相应的中断服务程序。
2. 嵌套中断处理嵌套中断处理是指当一个中断正在执行的过程中,又发生了另一个中断时,将当前中断挂起,转而处理新发生的中断,并在处理完毕后返回原中断继续执行的方法。
高二微机学考操作题知识点一、基础知识点1. 二进制和十进制的转换方法:在微机学考操作题中,常常需要将二进制数转换成十进制数或相反。
二进制数转换为十进制数的方法是,将每一位的二进制数乘以2的n次方,再将结果相加即可得到十进制数。
十进制数转换为二进制数的方法是,将十进制数除以2,取余数,然后倒序排列所得的余数。
2. 位、字节与字的关系与计算:在微机学操作题中,要了解位、字节和字的概念以及它们之间的关系。
一个位表示一个二进制数,8个二进制位组成一个字节,而一个字由多个字节组成。
3. 存储器的地址与容量计算:在微机学考操作题中,会涉及到存储器的地址和容量计算。
存储器的地址是从0开始连续编号的,而容量的单位常用字节表示。
计算存储器容量的方法是,将存储器的字节数除以1024,即可得到以KB为单位的容量。
二、指令系统1. 指令的格式与寻址方式:在微机学考操作题中,指令的格式包括操作码、寻址方式和操作数。
操作码表示指令的类型,寻址方式决定了如何获取操作数。
常见的寻址方式有直接寻址、立即寻址、寄存器寻址和间接寻址。
2. 数据传送指令的使用与特点:数据传送指令用于将数据从一个地方传输到另一个地方。
在微机学操作题中,要了解不同数据传送指令的使用方法以及它们的特点。
常见的数据传送指令有MOV、LOAD和STORE等。
3. 算数和逻辑运算指令的使用与特点:算数和逻辑运算指令用于进行数值运算和逻辑运算。
在微机学操作题中,要了解不同算数和逻辑运算指令的使用方法以及它们的特点。
常见的算数和逻辑运算指令有ADD、SUB、AND和OR等。
三、微处理器1. CPU的工作原理与主要组成部分:在微机学考操作题中,要了解CPU的工作原理和主要组成部分。
CPU包括运算器、控制器和寄存器等组件,其中运算器负责执行算术和逻辑运算,控制器负责解码和执行指令,寄存器用于存储数据和地址等。
2. 寄存器的种类及其作用:在微机学考操作题中,要了解不同类型的寄存器及其作用。
操作系统中的中断与异常处理机制在计算机系统中,操作系统起着至关重要的作用,它负责管理和控制计算机的资源,并提供给用户一个友好和高效的界面。
而在操作系统中,中断与异常处理机制是其中的重要组成部分。
一、什么是中断与异常处理机制中断与异常处理机制是操作系统用来响应特定事件或异常情况的方式。
当计算机系统发生某些事件,例如硬件故障、外部设备的请求等,操作系统会立即停止正在执行的任务,转而处理该事件。
在这种情况下,中断与异常处理机制起到了极为重要的作用。
二、中断与异常的区别尽管中断和异常都能够引发操作系统的响应,但两者之间存在一些区别。
1. 中断:中断是由外部设备发起的,例如键盘输入、鼠标点击等。
当外部设备需要与操作系统进行交互时,它会发出中断信号,这时操作系统会中断当前任务的执行,转而响应中断事件。
中断是一种在程序执行时突然发生的外部事件,需要处理器立即中断正在执行的任务并执行相应的中断处理程序。
2. 异常:异常是由程序内部产生的事件,也称为软中断。
当程序运行过程中出现错误、非法操作或者某些特殊事件时,会触发异常。
操作系统会根据异常的类型和优先级来处理该异常,进而采取相应的行动,例如打印错误信息、终止程序执行,或者进行异常处理。
三、中断与异常的处理流程中断与异常处理机制的处理流程如下:1. 中断发生:当外部设备产生中断信号时,处理器会暂停当前任务的执行,并将控制权交给操作系统。
2. 中断处理程序:操作系统会根据中断类型调用对应的中断处理程序。
中断处理程序会执行与中断相关的操作,例如获取键盘输入、响应鼠标事件等。
3. 中断处理完成:中断处理程序执行完毕后,操作系统会将控制权重新交还给之前的任务,使其继续执行。
4. 异常发生:在程序执行过程中,如果出现错误、非法操作或其他特殊事件,会触发异常。
5. 异常处理程序:操作系统会根据异常类型和优先级调用相应的异常处理程序。
异常处理程序会处理异常情况,例如打印错误信息、修复错误、终止程序执行等。
中断和异常处理读书笔记中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。
这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。
中断通常分为同步(synchronous)中断和异步(asynchronous)中断:同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。
异步中断是由其他硬件设备依照CPU时钟信号随机产生的。
在Intel微处理器手册中,把同步和异步中断分别称为异常(exception)和中断(interrupt)。
中断是由间隔定时器和I/O设备产生的,而异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的。
中断信号的作用:中断信号提供了一种特殊的方式,使处理器转而去执行正常控制流之外的代码。
当一个中断信号达到时,CPU必须停止它当前正在做的事情,并且切换到一个新的活动。
为了做到这一点,就要在内核态堆栈保存程序计数器的当前值,并把与中断类型相关的一个地址放进程序计数器。
中断处理与进程切换有一个明显的差异:由中断或异常处理程序所执行的代码不是一个进程,更确切的说,它是一个内核控制路径,代表中断发生时正在运行的进程执行。
作为一个内核控制路径,中断处理程序比一个进程要轻,中断的上下文很少,建立蒙昧无知中止中断处理所需要的时间很少。
中断处理是由内核执行的最敏感的任务之一,因为它必须满足以下约束:当内核正打算去完成一些别的事情时,中断随时会到来。
因此,内核的目标就是让中断尽可能快的处理完,尽其所能把更多的处理向后推迟。
内核响应中断后需要进行的操作分为两部分:关键而紧急的部分,内核立即执行;其余推迟的部分,内核随后执行。
因为中断随时会到来,所以内核可能正在处理其中一个中断时,另一个中断又发生了。
因此,中断处理程序必须编写成使相应的内核控制路径能以嵌套的方式执行。
当最后一个内核控制路径终止时,内核必须能恢复被中断进程的执行,或者,如果中断信号已导致了重新调度,内核能切换到另外的进程。
Windows异常处理流程作者:SoBeIt出处:/articles/200412/761.html日期:2005-01-06先来说说异常和中断的区别。
中断可在任何时候发生,与CPU正在执行什么指令无关,中断主要由I/O设备、处理器时钟或定时器等硬件引发,可以被允许或取消。
而异常是由于CPU执行了某些指令引起的,可以包括存储器存取违规、除0或者特定调试指令等,内核也将系统服务视为异常。
中断和异常更底层的区别是当广义上的中断(包括异常和硬件中断)发生时如果没有设置在服务寄存器(用命令号0xb向8259-1中断控制器0x20端口读出在服务寄存器1,用0xb向8259-2中断控制器的0xa0端口读出在服务寄存器2)相关的在服务位(每个在服务寄存器有8位,共对应IRQ 0-15)则为CPU的异常,否则为硬件中断。
下面是WINDOWS2000根据INTEL x86处理器的定义,将IDT中的前几项注册为对应的异常处理程序(不同的操作系统对此的实现标准是不一样的,这里给出的和其它一些资料不一样是因为这是windows的具体实现):中断号名字原因0x0 除法错误1、DIV和IDIV指令除02、除法结果溢出0x1 调试陷阱1、EFLAG的TF位置位2、执行到调试寄存器(DR0-DR4)设置的断点3、执行INT 1指令0x2 NMI中断将CPU的NMI输入引脚置位(该异常为硬件发生非屏蔽中断而保留)0x3 断点执行INT 3指令0x4 整数溢出执行INTO指令且OF位置位0x5 BOUND边界检查错误BOUND指令比较的值在给定范围外0x6 无效操作码指令无法识别0x7 协处理器不可用1、CR0的EM位置位时执行任何协处理器指令2、协处理器工作时执行了环境切换0x8 双重异常处理异常时发生另一个异常0x9 协处理器段超限浮点指令引用内存超过段尾0xA 无效任务段任务段包含的描述符无效(windows不使用TSS进行环境切换,所以发生该异常说明有其它问题)0xB 段不存在被引用的段被换出内存0xC 堆栈错误1、被引用内存超出堆栈段限制2、加载入SS寄存器的描述符的present位置00xD 一般保护性错误所有其它异常处理例程无法处理的异常0xE 页面错误1、访问的地址未被换入内存2、访问操作违反页保护规则0x10 协处理器出错CR0的EM位置位时执行W AIT或ESCape指令0x11 对齐检查错误对齐检查开启时(EFLAG对齐位置位)访问未对齐数据其它异常还包括获取系统启动时间服务int 0x2a、用户回调int 0x2b、系统服务int 0x2e、调试服务int 0x2d等系统用来实现自己功能的部分,都是通过异常的机制,触发方式就是执行相应的int指令。
操作系统学习(⼗三)、中断和异常⼀、中断和异常中断何和异常是指明系统、处理器或当前执⾏程序(或任务)的某处出现⼀个事件,该事件需要处理器进⾏处理。
通常,这种事情会导致执⾏控制器被强迫从当前运⾏程序转移到被称为终端处理程序或异常处理程序的特殊软件函数或任务中。
处理器响应中断或异常所采取的⾏动称为中断/异常服务(处理)。
通常中断发⽣在程序执⾏的随机时刻,以响应硬件发出的信号。
系统硬件使⽤中断来处理外部事件,例如要求为外部设备提供服务。
当然,软件也能通过执⾏ INT n 指令产⽣中断。
异常发⽣在处理器执⾏⼀条指令时,检测到⼀个出错条件时发⽣,例如被0除出错条件。
处理器可以检测到各种出错条件,包括违反保护机制。
页错误以及机器内部错误。
对应⽤程序来说,80x86的中断和异常处理机制可以透明地处理发⽣的异常和中断事件。
当收到⼀个中断或检测到⼀个异常时,处理器会⾃动把当前正在正在执⾏的程序或任务挂起,并开始运⾏中断或异常处理程序。
当处理程序执⾏完毕,处理器就会恢复并继续执⾏被中断的程序或任务。
被中断程序的恢复过程并不会失去程序执⾏的连贯性,除⾮从异常中恢复是不可能的或者中断异常导致当前运⾏程序被终⽌。
⼆、异常和中断向量为了有助于处理异常和中断,每个需要被处理器进⾏特殊处理的处理器定义的异常和中断条件都被赋予了⼀个标识号,称为向量。
处理器把赋予异常或中断的向量⽤作中断描述符表IDT中的⼀个索引号,来定位⼀个异常或中断的处理程序⼊⼝点位置。
允许的向量号范围是0到255.其中0到31保留⽤作80x86处理器定义的异常和中断,不过⽬前该范围内的向量号并⾮每个都已定义了功能,未定义功能的向量号将留在以后使⽤。
范围在32到255的向量号⽤于⽤户定义的中断。
这些中断通常⽤于外部I/O设备,使得这些设备可以通过外部硬件中断机制向处理器发送中断。
三、中断源和异常源(⼀)、中断源处理器从两种地⽅接收终端:外部(硬件产⽣)的中断。
大多数嵌入式处理器体系结构提供异常和中断机制,允许处理器中断正常的执行路径。
这个中断可能有应用软件有意的触发,或者由一个错误的、不寻常的条件或某些非计划的外部事件触发。
许多实时操作系统提供处理异常和中断的封装器功能,以便保护嵌入式系统开发者避开低层的细节。
这种应用编程层允许程序员把精力集中在必须处理的高层异常处理上,而不是在处理那些冗长的序言和结束语的系统层次上。
然而,当程序员从一个嵌入式应用程序员过渡到一个嵌入式系统程序员的时候,这种隔离可能产生误会并且变成一种障碍。
一、什么是异常和中断一个异常是指任何打断处理器正常执行,并且迫使处理器进入一个由有特权的特殊指令执行的事件。
异常可以分为两类:同步异常和异步异常。
由内部事件(像处理器指令运行产生的事件)引起的异常称为同步异常。
同步异常的例子包括下列各项:1.在某些处理器体系结构中,对于确定的数据尺寸必须从内存的偶数地址进行读和写操作。
从一个奇数内存地址的读或写操作将引起存储器存取一个错误事件并引起一个异常(称为校准异常)。
2.造成被零除的算术运算引发一个异常。
由外部事件(与处理器指令执行不相关的事件)引发的异常,称为异步异常。
一般,这些外部事件与硬件信号相关。
这些硬件信号典型的来源于外部硬件装置。
异步异常的例子包括下列各项:1.按下嵌入式板上的复位按钮,触发一个异步的异常(称为系统复位异常)。
2.另外一个外部设备的例子是,通信处理器模块已经成为许多嵌入式设计的一个完整部分,当它接收数据包时引发异步异常。
一个中断,有时称为一个外部中断,是一个由外部硬件装置产生的事件引起的异步异常。
中断是异常的一类。
中断区别于其它类型的异常,或更精确地说,同步异常区别于异步异常的地方是事件的来源。
同步异常事件是由于执行某些指令而从处理器内部产生的。
而异步异常事件的来源是外部硬件装置。
异常和中断是大多数嵌入式系统中必须存在的精灵。
这个设施是处理器体系结构特定的;如果误用,将成为混乱的设计源。
中断处理程序1.中断的基本概念中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
引起中断发生的事件被称为中断源。
中断源向CPU发出的请求中断处理信号称为中断请求,而CPU收到中断请求后转到相应的事件处理程序称为中断响应。
在有些情况下,尽管产生了中断源和发出了中断请求,但CPU内部的处理器状态字PSW 的中断允许位已被清除,从而不允许CPU响应中断。
这种情况称为禁止中断。
CPU禁止中断后只有等到PSW的中断允许位被重新设置后才能接收中断。
禁止中断也称为关中断,PSW 的中断允许位的设置也被称为开中断。
开中断和关中断是为了保证某段程序执行的原子性。
还有一个比较常用的概念是中断屏蔽。
中断屏蔽是指在中断请求产生之后,系统有选择地封锁一部分中断而允许另一部分中断仍能得到响应。
不过,有些中断请求是不能屏蔽甚至不能禁止的,也就是说,这些中断具有最高优先级,只要这些中断请求一旦提出,CPU必须立即响应。
例如,电源掉电事件所引起的中断就是不可禁止和不可屏蔽的。
2.中断的分类与优先级根据系统对中断处理的需要,操作系统一般对中断进行分类并对不同的中断赋予不同的处理优先级,以便在不同的中断同时发生时,按轻重缓急进行处理。
根据中断源产生的条件,可把中断分为外中断和内中断。
外中断是指来自处理器和内存外部的中断,包括I/0设备发出的I/O中断、外部信号中断(例如用户键人ESC键)。
各种定时器引起的时钟中断以及调试程序中设置的断点等引起的调试中断等。
外中断在狭义上一般被称为中断。
内中断主要指在处理器和内存内部产生的中断。
内中断一般称为陷阱(trap)或异常。
它包括程序运算引起的各种错误,如地址非法、校验错、页面失效、存取访问控制错、算术操作溢出、数据格式非法、除数为零、非法指令、用户程序执行特权指令、分时系统中的时间片中断以及从用户态到核心态的切换等都是陷阱的例子。
操作系统的中断处理与异常机制在计算机系统中,操作系统起着至关重要的作用,它负责管理和控制计算机硬件资源,提供用户与计算机的交互界面。
而操作系统的中断处理与异常机制是其核心功能之一。
本文将探讨操作系统中断处理与异常机制的原理和作用。
一、中断处理机制中断是操作系统与外部设备进行通信的一种方式,它可以打断正在运行的程序,使操作系统能够及时响应外部设备的请求。
中断的触发通常由硬件设备或软件指令发起。
1. 中断分类中断可以分为硬件中断和软件中断两种。
硬件中断是由外部设备引起的,并且是在计算机系统的内核态中操作。
常见的硬件中断包括时钟中断、键盘中断、磁盘中断等。
时钟中断用于实现操作系统的时间片轮转调度算法,键盘中断用于读取用户的输入,磁盘中断用于处理磁盘读写操作等。
软件中断是由系统调用指令或异常指令发起的,常用于用户程序与操作系统之间的通信。
用户程序可以通过软件中断请求操作系统提供的服务,如文件读写、进程创建等。
2. 中断处理步骤中断处理包括以下步骤:(1)中断请求发生:硬件设备或软件指令触发中断请求。
(2)中断服务例程保存现场:当前正在执行的指令和寄存器状态等被保存起来,以便在中断处理完毕后能够回到原来的执行点。
(3)中断服务例程执行:操作系统根据中断类型执行相应的中断服务例程。
(4)中断处理完毕:中断服务例程执行完毕,操作系统恢复原来的程序继续执行。
二、异常机制异常是计算机程序在执行过程中发生的一些异常情况,例如除零错误、越界访问等。
操作系统通过异常机制来处理这些异常情况,并采取相应的措施,以保证系统的稳定性和安全性。
1. 异常分类异常可以分为故障、陷阱和中断三种类型。
故障是指在程序执行过程中发生的错误,例如除零错误、页错误等。
故障可以由硬件或软件引起,当故障发生时,操作系统会采取一系列的错误处理措施,如终止异常程序的执行或者分配新的资源等。
陷阱是一种有意为之的异常情况,可用于实现系统调用和用户程序与操作系统之间的交互。
三、中断和异常1.中断 同步中断:由当前CPU执⾏完⼀条指令之后产⽣,intel处理器⼿册也将同步中断称为异常。
异步中断:由其他硬件设备依照CPU时钟信号随机产⽣,intel处理器⼿册将异步中断称为中断。
中断处理需要满⾜的约束: 1.中断处理必须尽可能的快和短,关键紧急和跟硬件相关的操作内核应⽴即执⾏,其余推迟的部分由内核稍后执⾏。
2.中断处理程序必须能够嵌套执⾏(针对不同类型的中断)。
3.内核代码的临界区中应该禁⽌中断。
但是必须尽可能的限制这样的临界区,否则会⼤⼤降低内核的运⾏效率。
2.中断和异常 Intel⽂档对中断和异常的分类: 中断: 可屏蔽中断(IRQ)、⾮屏蔽中断 异常: 处理器探测异常:当CPU执⾏指令时探测到的⼀个反常条件所产⽣的异常,可以进⼀步分为三组,取决于产⽣异常时eip寄存器的值。
故障,陷阱,异常中⽌,编程异常3.IRQ和中断 每个能发出中断请求的硬件设备控制器都有⼀条名为IRQ的输出线。
所有的IRQ线都与⼀个名为可编程中断控制器(PIC)的硬件电路的输⼊引脚相连。
IRQ线从0开始顺序编号。
可以有选择的禁⽌每条IRQ线,通过对PIC编程禁⽌和激活IRQ。
禁⽌的中断是丢失不了的,⼀旦中断被激活,PIC会将之前的中断信号发送到CPU,这样中断处理程序可以逐次地处理同⼀类型的IRQ。
⾼级可编程中断控制器: I/O⾼级可编程控制器(APIC),每个CPU都有⼀个本地APIC,每个APIC都有32位寄存器,所有本地APIC都连接到⼀个外部I/O APIC,形成⼀个多APIC的系统。
I/O APIC的组成:⼀组24条IRQ线、⼀张24项的中断重定向表。
中断优先级不与引脚号相关联,中断重定向表中的每⼀项都可以被单独编程以指明中断向量和优先级、⽬标处理器和选择处理器的⽅式。
来⾃外部硬件设备的中断请求以两种⽅式在可⽤CPU之间分发: 静态分发: IRQ信号传递给重定向表相应项中所列出的本地APIC。
PLC中断与异常PLC(可编程逻辑控制器)是自动化控制领域常用的设备,也是工业生产自动化程度不断提高的重要工具之一。
PLC的主要作用是对各种输入信号(如开关量、模拟量等)进行采集、处理,再根据设定的各种输出条件(比如控制电机运转、开关灯光等)来控制各种工业设备的运作。
然而,即使是最先进的PLC设备也难以完全避免中断和异常,下面我们从PLC中断和异常这两个方面来进行分析。
一、PLC中断1.什么是PLC中断PLC中断是指由于外部事件的发生,导致原来正在被执行的程序需要暂时中断执行,去处理其他事件,等处理完这个事件后,再回到原来的执行点继续执行。
在传统的计算机中,系统中断通常是由外设驱动产生的,但在PLC中,大多数中断都是由PLC自身的输出信号直接产生的。
这些输出信号一般会触发PLC内部的中断处理程序,从而引发PLC中断。
2.PLC中断类型(1)I/O中断I/O中断是PLC中最常见的中断类型,它是由PLC的输入/输出模块所控制的。
当外部程序的输入信号发生变化时,输入模块会向PLC发送一个中断请求信号,PLC则会在当前的程序执行点上停下来,并跳转到中断服务程序,以完成相关的中断处理操作。
(2)定时器/计数器中断为保证PLC所执行的程序能够满足实时性要求,很多PLC设备都内置了定时器/计数器。
这些定时器/计数器通常会在PLC运行的同时计时/计数,当计时时间达到设定值时,会向PLC发送中断请求信号,引发PLC中断。
(3)总线中断当PLC通过网络(如CAN总线、以太网等)连接到其他设备上时,发生在其他设备上的事件也可能会导致PLC中断。
比如当某个节点失联时,周围节点会发送一个“节点失联”信息帧,PLC 就会收到这个信息,判断该事件为中断请求,并按照相应的中断处理程序进行处理。
二、PLC异常1.什么是PLC异常在PLC系统中,除了中断外,还存在一些异常。
与中断不同的是,异常通常是源于PLC本身的一些内部问题,如错误的PLC程序设计、PLC硬件故障、传感器故障等。
操作系统笔记⼀:中断、异常和陷⼊机制
中断/异常/陷⼊机制是操作系统由⽤户态转为内核态的唯⼀途径,是操作系统的驱动⼒。
中断、异常机制有以下特征:
1. 随机发⽣
2. ⾃动处理(硬件完成)
3. 可恢复
中断、异常的区别:
中断属外部事件,是正在运⾏的程序所不期望的
异常由正在执⾏的指令引发
在中断、异常过程中,软件和硬件分别担任什么⾓⾊:
硬件--中断/异常响应
软件--中断/异常处理程序
中断/异常的引⼊⽬的:
中断的引⼊是为了CPU与设备之间的并⾏操作
异常的引⼊是为了表⽰CPU执⾏指令时本⾝出现的问题
⼀个故事:⼩明在看书,突然来了个电话,接完电话继续看书,这是中断;⼩明在看书,感觉⼝渴了,喝了⽔接着看书,这是异常。
类别原因同步/异
步
返回⾏为
中断中断
(interrupt)
来⾃I/O设备或其他硬件部
件
异步
总是返回到下⼀条指
令
异常陷⼊(trap)有意识安排的同步返回到下⼀条指令故障(fault)可恢复的错误同步返回到当前指令终⽌(abort)不可恢复的错误同步不会返回
故障与陷⼊:
缺页异常(page fault),由于是fault,所以当缺页异常处理完成之后,还会去尝试重新执⾏那条触发异常的指令(那时多半情况是不再缺页)
断点处理,⽤于调试中,遇到断点会停下来等待你的处理,等到你让其重新执⾏了,就直接执⾏下⼀条指令
完、。
ARMCortex-M3权威指南-中断和异常(2)中断和异常它⽀持16-4-1=11 种系统异常(同步)(保留了 4+1 个档位),外加 240 个外部中断输⼊(异步)。
在 CM3 中取消了 FIQ 的概念(v7 前的ARM 都有这个 FIQ,快中断请求),这是因为有了更新更好的机制——中断优先级管理以及嵌套中断⽀持,它们被纳⼊ CM3 的中断管理逻辑中。
因此,⽀持嵌套中断的系统就更容易实现 FIQ。
虽然 CM3 是⽀持 240 个外中断的,但具体使⽤了多少个是由芯⽚⽣产商决定。
CM3还有⼀个NMI(不可屏蔽中断)输⼊脚。
当它被置为有效(assert)时, NMI 服务例程会⽆条件地执⾏。
NMI 究竟被拿去做什么,还要视处理器的设计⽽定。
在多数情况下, NMI 会被连接到⼀个看门狗定时器,有时也会是电压监视功能块,以便在电压掉⾄危险级别后警告处理器。
向量表当 CM3 内核响应了⼀个发⽣的异常后,对应的异常服务例程(ESR)就会执⾏。
为了决定 ESR 的⼊⼝地址, CM3 使⽤了“向量表查表机制”。
这⾥使⽤⼀张向量表。
向量表其实是⼀个 WORD(32 位整数)数组,每个下标对应⼀种异常,该下标元素的值则是该 ESR 的⼊⼝地址。
向量表在地址空间中的位置是可以设置的,通过 NVIC 中的⼀个重定位寄存器来指出向量表的地址。
在复位后,该寄存器的值为 0。
因此,在地址 0 处必须包含⼀张向量表,⽤于初始时的异常分配。
举个例⼦,如果发⽣了异常 11(SVC),则 NVIC 会计算出偏移移量是11x4=0x2C,然后从那⾥取出服务例程的⼊⼝地址并跳⼊。
要注意的是这⾥有个另类: 0 号类型并不是什么⼊⼝地址,⽽是给出了复位后MSP 的初值。
CM3允许向量表重定位即从其它地址处开始执⾏各异常向量。
这些地址对应的区域可以是代码区,但也可以是 RAM 区。
在 RAM区就可以修改向量的⼊⼝地址了。
为了实现这个功能, NVIC中有⼀个寄存器,称为“向量表偏移量寄存器”(在地址 0xE000_ED08 处),通过修改它的值就能定位向量表。
异常和中断的区别1>异常:是指CPU内部出现的中断,即在CPU执⾏特定指令时出现的⾮法情况。
同时异常也称为同步中断,因此只有在⼀条指令执⾏后才会发出中断,不可能在指令执⾏期间发⽣异常。
a.产⽣的原因:程序的错误产⽣的,编程异常通常叫做软中断(eg:除数为0)内核必须处理的异常条件产⽣的(eg:缺页)产⽣的⽬的:Linux利⽤异常来达到两个截然不同的⽬的:·给进程发送⼀个信号以通报⼀个反常情况·管理硬件资源对于第⼀种情况,例如,如果进程执⾏了⼀个被0除的操作,CPU则会产⽣⼀个“除法错误”异常,并由相应的异常处理程序向当前进程发送⼀个SIGFPE信号。
当前进程接收到这个信号后,就要采取若⼲必要的步骤,或者从错误中恢复,或者终⽌执⾏(如果这个信号没有相应的信号处理程序)。
对于第⼆种情况,内核使⽤两种异常来有效地管理硬件资源,相应的处理程序也就更复杂。
在这种情况下,异常并不表⽰⼀种错误情况:·⽤“设备不可⽤”异常来推迟装载浮点寄存器。
·⽤“缺页”异常推迟把新页框分配给进程。
异常⼜分为故障和陷阱。
b.产⽣都不使⽤中断控制器,中断号由指令直接给出。
不能被屏蔽。
c.异常没有⾃⼰的进程上下⽂,会⽤到当前进程的进程上下⽂。
d.在CPU执⾏⼀个异常处理程序时,就不再响应其他异常和中断请求服务.如果此时发⽣了⼀个异常,CPU不能去响应它,⼜不能把它的信息丢失该怎么办呢?这是就⽤到了堆栈,把所有的信息压⼊栈。
等当前异常处理后,才从堆栈中取出信息再响应刚才的异常。
e.X86处理处理器中⼤约有20种异常。
Linux内核必须为每种异常提供⼀个专门的异常处理程序。
2>中断:也称为异步中断。
因此它是由其他硬件设备依照CPU时钟信号随机产⽣,即意味着中断能在指令之间发⽣。
a.中断主要是响应外部硬件设备的。
b.产⽣通过中断控制器,中断号是由中断控制器提供的(NMI硬中断中断号系统指定为02H)。