异常及中断处理

合集下载

单片机的中断与异常处理方法

单片机的中断与异常处理方法

单片机的中断与异常处理方法在单片机的工作过程中,中断和异常处理是非常重要的概念和方法。

它们能够有效地提高单片机的响应能力和灵活性,使其能够应对各种不同的工作需求和问题。

本文将介绍单片机中断的概念、中断的种类以及针对不同中断的处理方法,同时也会探讨单片机异常处理的原理和方法。

一、中断的概念和种类中断是指在一个程序执行的过程中,由于某种特殊的事件发生,导致程序的正常执行被打断,转而去执行一个与当前任务无关的子程序,完成该事件的相应处理。

中断可以分为外部中断和内部中断两种。

1. 外部中断外部中断是指当单片机外部引脚的电平或信号发生变化时,引发中断事件,使单片机停止当前任务的执行,去处理由该外部事件引发的中断服务程序(ISR)。

外部中断常用于与外部设备的交互,如按键输入、传感器检测等。

在编程中,我们可以通过设置中断触发条件和编写相应的中断服务程序来实现对外部中断的处理。

2. 内部中断内部中断是指当单片机内部某个特定的事件发生时,由硬件或软件触发中断请求,并且将控制权交给中断服务程序进行相应的处理。

内部中断的发生可以是由于某个特定条件的满足,如定时器溢出中断、串口接收中断等;也可以是由软件的运行结果触发,如除法溢出中断、地址错误中断等。

不同的内部中断需要通过编程实现相应的中断服务程序。

二、中断的处理方法中断处理是指在中断发生时,单片机通过中断向量表找到相应的中断服务程序,并对中断事件进行处理的过程。

下面将介绍两种常用的中断处理方法。

1. 优先级中断处理优先级中断处理是指对多个中断源按照优先级进行划分和处理的方法。

在单片机的中断系统中,每个中断源都被赋予了一个优先级,高优先级的中断可以打断当前正在执行的低优先级中断,从而增加了中断的响应速度和灵活性。

优先级中断处理需要在编程时设置中断的优先级,并根据不同的中断事件编写相应的中断服务程序。

2. 嵌套中断处理嵌套中断处理是指当一个中断正在执行的过程中,又发生了另一个中断时,将当前中断挂起,转而处理新发生的中断,并在处理完毕后返回原中断继续执行的方法。

Cortex-M4的中断与异常处理

Cortex-M4的中断与异常处理

Cortex-M4的中断与异常处理11.4.3异常模式11.4.3.1异常状态不活跃.这种异常是不活跃,不等待。

等待.例外的是等待由处理器处理。

来⾃外设或软件的中断请求可以将相应的中断状态更改为挂起。

活跃。

这种异常是被服务处理器,但还没有完成。

异常处理程序可以中断另⼀个异常处理程序的执⾏。

在这种情况下,两个异常都处于活动状态。

活跃和等待。

该异常服务由处理器和存在来⾃相同源的现⾏异常。

11.4.3.2异常类型重置异常。

重置是⼀种复位调⽤上电或热复位。

这种异常模式将复位作为⼀种特殊形式。

当发⽣复位时,处理器运⾏停⽌,有可能在⼀个指令的任何点。

当复位置为⽆效,重新开始执⾏从向量表中复位⼊⼝的地址。

执⾏是特权执⾏的线程模式。

NMI异常。

⾮屏蔽中断(NMI)可以通过⼀个外设或由软件触发发出信号。

这是最⾼优先级的异常,⽐其他复位都⾼。

它是永久启⽤并拥有-2⼀个固定的优先级。

NMI不能被掩蔽或通过任何其它异常阻⽌激活,也不能被通过⽐复位之外的任何异常抢占。

硬故障的发⽣是由于异常处理期间有错误的异常,或者因为异常不能被任何异常机制管理。

硬故障拥有-1固定的优先级,这意味着他们有更⾼的优先级⽐配置优先级的任何异常。

内存管理故障。

内存管理故障的发⽣是由于内存保护相关的故障异常引起的。

该MPU或固定存储器保护限制决定了该故障指令和数据存储器事务。

该故障⽤来取消指令对不执⾏(XN)存储区域的操作,即使MPU被禁⽤。

总线故障。

总线故障的发⽣是因为⼀个指令或数据存储器事务的存储器相关的故障异常。

这可能是由⼀个总线上的存储器系统中检测到错误。

应⽤故障。

应⽤故障是因为涉及到指令执⾏的故障发⽣了异常,包括:未定义指令;⼀个⾮法的未对齐访问;⽆效状态的指令执⾏;异常返回⼀个错误。

SVCall异常。

系统调⽤(SVC)是由SVC指令触发了异常。

在OS环境,应⽤程序可以使⽤SVC指令来访问OS内核函数和器件驱动。

PendSV异常。

PendSV的是系统级的服务中断驱动的请求。

中断异常处理流程

中断异常处理流程

计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。

异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。

而中断则带有向处理器主动申请的意味。

但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。

若无特别说明,对“异常”和“中断”都不作严格的区分。

本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。

1.异常中断响应和返回系统运行时,异常可能会随时发生。

当一个异常出现以后,ARM微处理器会执行以下几步操作:1) 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。

2)将CPSR复制到相应的SPSR中。

3)根据异常类型,强制设置CPSR的运行模式位。

4) 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

这些工作是由ARM内核完成的,不需要用户程序参与。

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:1)将连接寄存器LR的值减去相应的偏移量后送到PC中。

2)将SPSR复制回CPSR中。

3) 若在进入异常处理时设置了中断禁止位,要在此清除。

这些工作必须由用户在中断处理函数中实现。

为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。

采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。

当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。

当异常处理完成以后,返回到主程序继续执行。

可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。

2.异常处理程序设计2.1 异常响应流程由于向量表的限制,只能有一条指令B完成32MB范围内的跳转,并不能保证所有的异常处理函数都位于32MB范围内。

什么是中断处理?

什么是中断处理?

什么是中断处理?中断处理是计算机系统中一个重要的概念,它通过打破程序的正常执行顺序,暂停当前任务,响应一个外部事件或者异常情况,来处理这些事件或者异常。

中断处理的目的是提高系统的响应能力和整体的运行效率,使得系统能够及时响应发生的事件,并且保证计算机能够正常地处理各种异常情况。

中断处理的目的多种多样,可以是外部设备的输入输出、硬件错误、软件异常等。

在计算机系统中,中断可以分为硬件中断和软件中断。

硬件中断主要由外部设备的工作状态发生变化引起,比如键盘输入、鼠标操作等。

而软件中断则是由程序中的特殊指令或者软件异常引起的。

中断处理的流程一般包括中断响应、中断服务和中断返回三个主要步骤。

中断响应是指当系统接收到中断请求信号时,暂停当前任务,保存当前状态,切换到中断服务程序的执行。

中断服务则是对中断事件或异常进行相应的处理,可能需要读取或写入设备数据、进行错误处理等。

中断返回则是指将中断处理完毕后的计算机状态恢复到原来的状态,继续执行原来的任务。

中断处理的优点在于它能够及时地响应外部事件和异常情况,并且能够在不干扰其他任务的情况下进行处理。

中断处理使得计算机系统具有更高的灵活性和可靠性。

同时,中断处理也带来了一些挑战,比如中断优先级的管理、中断嵌套的处理等。

总结起来,中断处理是计算机系统中的一个重要概念,通过打破程序的正常执行顺序,响应外部事件和异常情况,来实现系统的高效运行和灵活性。

中断处理涉及到中断响应、中断服务和中断返回等多个步骤,并且需要管理中断的优先级和处理中断嵌套的情况。

中断处理在计算机系统中扮演着重要角色,对系统的性能和可靠性有着重要影响。

关于中断和异常的一些理解

关于中断和异常的一些理解

关于中断和异常的⼀些理解中断中断(硬件中断)是cpu为了响应外部突发事件⽽引⼊的⼀种机制。

在没有中断机制之前cpu需要频繁查询外部设备的状态来与外部设备进⾏通信,⽽有了中断机制后,只有当外部设备要求cpu进⾏处理时cpu才会与其进⾏通信,这就⼤⼤提⾼了cpu的效率。

中断分类可屏蔽中断可屏蔽中断是为了使在执⾏某些任务时系统不希望被打断,所以需要把⼀些中断进⾏屏蔽。

可屏蔽中断请求信号通常是通过CPU的INTR引脚发给CPU的,可以通过CLI 指令把标志寄存器的IF位置零从⽽把可屏蔽信号屏蔽。

不可屏蔽中断不可屏蔽中断是为了处理某些特殊情况。

不可屏蔽中断请求信号是通过CPU的NMI引脚发给CPU的,这时即便使⽤了CLI指令把标志寄存器的IF位置零了也⽆法屏蔽这些中断请求信号,CPU依然需要暂停去执⾏相应的中断处理例程。

异常异常(有的书上也将其称为软中断,即内部中断)是指程序在执⾏过程中形成了某些预先设定的情景,即发⽣某些特定的异常然后cpu会去执⾏相应的异常处理程序。

因为异常有时被认为是软中断,⼜因为异常不基于硬件(也就是不依靠标志寄存器的IF位),所以所有的异常都属于不可屏蔽的中断。

异常分类错误类异常错误类异常⼀般是可以在异常处理后回到发⽣异常的地⽅继续执⾏的,也就是说eip指令指针还会指向引发异常的那条指令。

例如硬件执⾏断点引发的异常,在异常处理后依然会执⾏引发异常的那条指令,如果你不处理他就会⼀直循环引发异常⽆法往下继续运⾏。

陷阱类异常陷阱类异常⼀般是在执⾏完某条指令后引发的异常,因此当发⽣异常时eip指令指针寄存器已经指向引发异常的下⼀条指令。

但是也有⼀些特殊情况,如int3引发的断点异常就时陷阱类异常,但是系统为了⽀持调试会让异常处理程序令eip-1使其⼜指向引发异常的那条指令。

中⽌类异常中⽌类异常⼀般是发⽣了⼀些严重的错误,系统⽆法令程序恢复执⾏只能结束运⾏。

中断和异常的关系有时我们把中断和异常混为⼀谈,会把异常称之为软中断(内部中段)。

操作系统的中断处理与异常处理机制

操作系统的中断处理与异常处理机制

操作系统的中断处理与异常处理机制在计算机系统中,操作系统是一个管理和协调系统资源的软件,中断处理和异常处理是操作系统的核心功能之一。

中断处理和异常处理机制使得操作系统能够及时响应硬件设备或软件程序的请求,并采取相应的措施进行处理,保证系统的稳定性和可靠性。

本文将详细介绍操作系统的中断处理与异常处理机制。

一、中断处理机制中断是指在计算机系统运行过程中,某个硬件设备或者软件程序发出的一种请求,通过打断正常的程序执行流程,通知操作系统去处理该请求。

中断可以分为硬件中断和软件中断两类。

1. 硬件中断硬件中断是由硬件设备发生的一种中断事件,比如外设设备的输入输出操作,时钟中断等。

当硬件设备发生中断事件后,会向处理器发送一个中断信号,处理器暂停当前的执行任务,保存当前的上下文信息,并转入中断处理程序来处理中断事件。

中断处理程序会根据中断类型来执行相应的操作,比如读取输入设备的数据,将数据写入输出设备等。

处理完中断事件后,处理器会恢复之前被中断的任务继续执行。

2. 软件中断软件中断是由软件程序主动触发的一种中断事件,也称为系统调用。

软件中断通常由用户态程序调用系统库函数来完成,通过系统调用指令将自己的执行权限转交给操作系统,由操作系统代为执行相应的操作。

常见的软件中断包括文件读写操作、进程创建与销毁等系统调用。

中断处理机制的优点在于能够及时响应外部设备和软件程序的请求,提高了系统的实时性和处理能力。

同时,使用中断处理机制可以实现很多复杂的功能,比如多任务处理、设备驱动程序等。

二、异常处理机制异常是指在程序执行过程中出现的一种非正常情况,例如非法指令、除数为零等。

异常处理机制能够捕捉这些异常事件并进行相应的处理。

异常处理机制主要分为硬件异常和软件异常两类。

1. 硬件异常硬件异常指的是由硬件设备产生的异常事件,如页错误、越界访问等。

当硬件设备检测到异常事件后,会向处理器发送一个异常信号,处理器会中断当前任务的执行,并把当前的上下文信息保存起来,然后转入异常处理程序去处理异常事件。

简述异常与中断处理的一般流程

简述异常与中断处理的一般流程

简述异常与中断处理的一般流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 异常或中断发生:当异常或中断事件发生时,硬件会自动将相关信息保存到特定的寄存器中,例如程序计数器(PC)、栈指针(SP)等。

操作系统中的中断与异常处理机制

操作系统中的中断与异常处理机制

操作系统中的中断与异常处理机制在计算机系统中,操作系统起着至关重要的作用,它负责管理和控制计算机的资源,并提供给用户一个友好和高效的界面。

而在操作系统中,中断与异常处理机制是其中的重要组成部分。

一、什么是中断与异常处理机制中断与异常处理机制是操作系统用来响应特定事件或异常情况的方式。

当计算机系统发生某些事件,例如硬件故障、外部设备的请求等,操作系统会立即停止正在执行的任务,转而处理该事件。

在这种情况下,中断与异常处理机制起到了极为重要的作用。

二、中断与异常的区别尽管中断和异常都能够引发操作系统的响应,但两者之间存在一些区别。

1. 中断:中断是由外部设备发起的,例如键盘输入、鼠标点击等。

当外部设备需要与操作系统进行交互时,它会发出中断信号,这时操作系统会中断当前任务的执行,转而响应中断事件。

中断是一种在程序执行时突然发生的外部事件,需要处理器立即中断正在执行的任务并执行相应的中断处理程序。

2. 异常:异常是由程序内部产生的事件,也称为软中断。

当程序运行过程中出现错误、非法操作或者某些特殊事件时,会触发异常。

操作系统会根据异常的类型和优先级来处理该异常,进而采取相应的行动,例如打印错误信息、终止程序执行,或者进行异常处理。

三、中断与异常的处理流程中断与异常处理机制的处理流程如下:1. 中断发生:当外部设备产生中断信号时,处理器会暂停当前任务的执行,并将控制权交给操作系统。

2. 中断处理程序:操作系统会根据中断类型调用对应的中断处理程序。

中断处理程序会执行与中断相关的操作,例如获取键盘输入、响应鼠标事件等。

3. 中断处理完成:中断处理程序执行完毕后,操作系统会将控制权重新交还给之前的任务,使其继续执行。

4. 异常发生:在程序执行过程中,如果出现错误、非法操作或其他特殊事件,会触发异常。

5. 异常处理程序:操作系统会根据异常类型和优先级调用相应的异常处理程序。

异常处理程序会处理异常情况,例如打印错误信息、修复错误、终止程序执行等。

锅炉运行用电中断异常现象和处理措施

锅炉运行用电中断异常现象和处理措施

锅炉运行用电中断异常现象和处理措施
一、用电中断异常现象
1、电动机跳闸,指示灯闪亮,事故报警器报警;
2、热工仪表失电,指示失常;
3、电压表、电流表指示回零;
4、锅炉汽温、汽压、水位均急剧下降。

二、用电中断异常处理措施
1、立即将电动机开关切向停止位置,按停炉处理;
2、如全厂动力电源失去时,立即停止给煤,停炉压火,关闭主汽门、给水门,开启省煤器再循环门,关闭连排门,尽量保持水位;
3、若给水泵有电源时,保持锅炉正常供水;
4、若锅炉操作盘电源失去时,须有专人就地监视水位,保持锅炉正常供水;
5、电源恢复后值长统一指挥,依次启动电机,防止同时启动;
6、如电源失电时间较长,汽包水位计看不见水位时,必须先叫水,叫出水则可上水,叫不出水时严禁上水,放出全部床料待锅炉完全冷却后方可向锅炉进水。

中断和异常处理读书笔记

中断和异常处理读书笔记

中断和异常处理读书笔记中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。

这样的事件与CPU芯片内外部硬件电路产生的电信号相对应。

中断通常分为同步(synchronous)中断和异步(asynchronous)中断:同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。

异步中断是由其他硬件设备依照CPU时钟信号随机产生的。

在Intel微处理器手册中,把同步和异步中断分别称为异常(exception)和中断(interrupt)。

中断是由间隔定时器和I/O设备产生的,而异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的。

中断信号的作用:中断信号提供了一种特殊的方式,使处理器转而去执行正常控制流之外的代码。

当一个中断信号达到时,CPU必须停止它当前正在做的事情,并且切换到一个新的活动。

为了做到这一点,就要在内核态堆栈保存程序计数器的当前值,并把与中断类型相关的一个地址放进程序计数器。

中断处理与进程切换有一个明显的差异:由中断或异常处理程序所执行的代码不是一个进程,更确切的说,它是一个内核控制路径,代表中断发生时正在运行的进程执行。

作为一个内核控制路径,中断处理程序比一个进程要轻,中断的上下文很少,建立蒙昧无知中止中断处理所需要的时间很少。

中断处理是由内核执行的最敏感的任务之一,因为它必须满足以下约束:当内核正打算去完成一些别的事情时,中断随时会到来。

因此,内核的目标就是让中断尽可能快的处理完,尽其所能把更多的处理向后推迟。

内核响应中断后需要进行的操作分为两部分:关键而紧急的部分,内核立即执行;其余推迟的部分,内核随后执行。

因为中断随时会到来,所以内核可能正在处理其中一个中断时,另一个中断又发生了。

因此,中断处理程序必须编写成使相应的内核控制路径能以嵌套的方式执行。

当最后一个内核控制路径终止时,内核必须能恢复被中断进程的执行,或者,如果中断信号已导致了重新调度,内核能切换到另外的进程。

Intel手册第3卷中断和异常处理修正1

Intel手册第3卷中断和异常处理修正1

注:红色表明翻译得不一定正确6号中断——非法操作码异常(#UD)两处8号中断——双重故障异常(#DF)几处10 号中断——无效TSS异常(#TS)几处11 号中断——段不存在(#NP)几处12 号中断——栈故障异常(#SS)几处中断项目录:0号中断——除法出错异常(#DE)1号中断——调试异常(#DB)2号中断——NMI 中断3号中断——断点异常(#BP)4号中断——溢出异常(#OF)5号中断——BOUND越界异常(#BR)6号中断——非法操作码异常(#UD)7号中断——设备不可用异常(#NM)8号中断——双重故障异常(#DF)9号中断——协处理器段越界10 中断——无效TSS异常(#TS)11 中断——段不存在(#NP)12 中断——栈故障异常(#SS)13 中断——通用保护异常(#GP)14 中断——页故障异常(#PF)16 中断——x87 FPU浮点错误(#MF)17 中断——对齐检测异常(#AC)18 中断——机器检测异常(#MC)19 中断——SIMD浮点异常(#XM)32--255——用户定义中断CHAPTER 5 INTERRUPT AND EXCEPTION HANDLINGThis chapter describes the interrupt and exception-handling mechanism when operating in protected mode on an Intel 64 or IA-32 processor. Most of the information provided here also applies to interrupt and exception mechanisms used in real-address, virtual-8086 mode, and 64-bit mode.Chapter 15, “8086 Emulation,” describes information specific to interrupt and excep-tion mechanisms in real-address and virtual-8086 mode. Section 5.14, “Exception and Interrupt Handling in 64-bit Mode,” describes information specific to interrupt and exception mechanisms in IA-32e mode and 64-bit sub-mode.第五章中断和异常处理本章描述Intel 64 或 IA-32 处理器在保护模式下的中断和异常处理机制。

TCP连接中的异常断开情况处理

TCP连接中的异常断开情况处理

TCP连接中的异常断开情况处理在TCP连接中,由于网络问题或其他原因,可能会出现异常断开的情况,这会导致连接中断,影响通信的正常进行。

处理这种情况需要做到及时发现异常,迅速处理并恢复连接,以确保通信的可靠性和稳定性。

一、异常断开的原因分析异常断开的原因可能有很多,以下是一些常见的情况:1.网络故障:网络中断、连接超时等问题可能导致TCP连接异常断开。

2.资源限制:服务器端资源不足、负载过高等因素可能导致TCP连接无法正常建立或断开。

3.客户端或服务器故障:客户端或服务器端出现故障,导致连接异常断开。

4.防火墙或网络策略:网络设备中的防火墙或其他网络策略可能会阻止TCP连接,导致异常断开。

5.安全机制:安全机制可能会主动关闭TCP连接,例如SSL/TLS中的证书过期、校验失败等。

二、异常断开的处理策略针对不同的异常断开原因,可采取的处理策略如下:1.监控网络状态:通过网络监控工具及时发现网络故障,包括网络中断、延迟过高等情况,及时进行故障排查和处理。

2.心跳机制:在TCP连接中引入心跳机制,定时发送心跳消息,保持连接的存活状态。

如果长时间未收到心跳回复,即可判断为连接异常断开,并进行恢复操作。

3.连接超时设置:在客户端和服务器端设置适当的连接超时时间,避免连接时间过长而导致的异常断开。

超时后立即关闭连接并进行重试操作。

4.重连机制:在连接异常断开后,客户端可以尝试重新建立连接,重新进行握手等操作。

可以设定重连的次数和间隔,以避免频繁连接导致的资源浪费。

5.断线重传:当连接异常断开后,可根据TCP的重传机制进行数据的重传,确保数据的可靠传输。

在重传过程中,需要注意重传次数和超时时间的合理设置,避免资源浪费和延迟过高。

6.异常处理机制:应用层可以采用异常处理机制,捕获TCP连接异常断开的异常,并进行相应的处理操作。

例如,记录日志、通知管理员等。

7.安全策略优化:如使用SSL/TLS协议进行加密通信时,定期更新证书、配置合适的校验策略,避免连接因证书过期或校验失败而异常断开。

微处理器9CortexM3异常(中断)处理

微处理器9CortexM3异常(中断)处理

Cortex-M3的异常(中断)处理
优先级分组
为了对具有大量中断的系统加强优先级控制,NVIC
支持优先级分组机制。您可以使用应用中断和复位控制寄 存器中的PRIGROUP区来将每个PRI_N中的值分为占先优
先级区和次优先级区。我们将占先优先级称为组优先级。 如果有多个挂起异常共用相同的组优先级,则需使用次优 先级区来决定同组中的异常的优先级,这就是同组内的次 优先级。组优先级和次优先级的结合就是通常所说的优先 级。如果两个挂起异常具有相同的组优先级,则挂起异常 的编号越低优先级越高。这与优先级机制是一致的。
Cortex-M3的异常(中断)处理
优先级分组
中断优先级区(PRI_N[7:0])
占先区
次优先区
PRI_N 7 6 5 4 3 2 1 0
注意: 修改PRIGROUP区的值可改变占先区和 次优先区的位数。
1. 占先优先级又称 为组优先级
2. 如果两个挂起异 常具有相同的组 优先级,则挂起 异常的编号越低 优先级越高。
Cortex-M3的异常(中断)处理
优先级分组
PRIGROU P[2:0]
二进制点 的位置
中断优先级区,PRI_N[7:0]
占先区 次优先 占先优先级
级区
的数目
次优先级 的数目
b000
bxxxxxxx.y [7:1] [0]
128
2
b001
bxxxxxx.yy [7:2] [1:0] 64
4
b010
Cortex-M3的异常(中断)处理
返回
异常基于优先级的动作
在没有挂起异常或没有比被压栈的ISR优先级更高 的挂起异常时,处理器执行出栈操作,并返回到被压 栈的ISR或线程模式。

(MIPS体系结构剖析-编程与实践)第4章-MIPS-异常和中断处理文库

(MIPS体系结构剖析-编程与实践)第4章-MIPS-异常和中断处理文库

第四章 MIPS 异常和中断处理MIPS 异常和中断处理(Exception and Interrupt handling)任何一个CPU都要提供一个详细的异常和中断处理机制。

一个软件系统,如操作系统,就是一个时序逻辑系统,通过时钟,外部事件来驱动整个预先定义好的逻辑行为。

这也是为什么当写一个操作系统时如何定义时间的计算是非常重要的原因。

大家都非常清楚UNIX提供了一整套系统调用(System Call)。

系统调用其实就是一段EXCEPTION处理程序。

我们可能要问:为什么CPU要提供Excpetion 和 Interrupt Handling呢?*处理illegal behavior, 例如,TLB Fault, or, we say, the Page fault; Cache Error;* Provide an approach for accessing priviledged resources, for example, CP0 registers. As we know, for user level tasks/processes, they are runningwith the User Mode priviledge and are prohibilited to directly control CPO. CPU need provide a mechanism for them to trap to kernel mode and then safely manipulate resources that are only availablewhen CPU runs in kernel mode.* Provide handling for external/internal interrupts. For instance, the timer interrupts and watch dog exceptions. Those two interrupt/exceptions are very important for an embedded system applicances.Now let's get back to how MIPS supports its exception and interrupt handling.For simplicty, all information below will be based on R7K CPU, which is derived from the R4k family.* The first thing for understanding MIPS exception handling is: MIPS adopts **Precise Exceptions** mechanisms. What that means? Here is the explaination from the book of "See MIPS Run": "In a precise-exception CPU, on any exception we get pointed at one instruction(the exception victim). All instructions preceding the exception victim in executionsequence are complete; any work done on the victim and on any subsequent instructions (BNN NOTE: pipeline effects) has no side effects that the software need worry about. The software that handles exceptions can ignore all the timing effects of the CPU's implementations"上面的意思其实很简单:在发生EXCEPTION之前的一切计算行为会**FINISH**。

中断机制和中断描述符表、中断和异常的处理

中断机制和中断描述符表、中断和异常的处理

中断机制和中断描述符表、中断和异常的处理注:本分类下⽂章⼤多整理⾃《深⼊分析linux内核源代码》⼀书,另有参考其他⼀些资料如《linux内核完全剖析》、《linux c 编程⼀站式学习》等,只是为了更好地理清系统编程和⽹络编程中的⼀些概念性问题,并没有深⼊地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友⾃⼰参考相关资料。

此书出版较早,分析的版本为2.4.16,故出现的⼀些概念可能跟最新版本内核不同。

此书已经开源,阅读地址1、中断向量Intel x86 系列微机共⽀持256 种向量中断,为使处理器较容易地识别每种中断源,将它们从0~255 编号,即赋予⼀个中断类型码 n,Intel 把这个8 位的⽆符号整数叫做⼀个向量,因此,也叫中断向量。

所有256 种中断可分为两⼤类:异常和中断。

异常⼜分为故障(Fault)、陷阱(Trap)和夭折(Abort),它们的共同特点是既不使⽤中断控制器,⼜不能被屏蔽。

中断⼜分为外部可屏蔽中断(INTR)和外部⾮屏蔽中断(NMI),所有I/O 设备产⽣的中断请求(IRQ)均引起屏蔽中断,⽽紧急的事件(如硬件故障)引起的故障产⽣⾮屏蔽中断。

⾮屏蔽中断的向量和异常的向量是固定的,⽽屏蔽中断的向量可以通过对中断控制器的编程来改变。

Linux 对256 个向量的分配如下。

• 从0~31 的向量对应于异常和⾮屏蔽中断。

• 从32~47 的向量(即由I/O 设备引起的中断)分配给屏蔽中断。

• 剩余的从48~255 的向量⽤来标识软中断。

Linux 只⽤了其中的⼀个(即128 或0x80向量)⽤来实现系统调⽤。

当⽤户态下的进程执⾏⼀条int 0x80 汇编指令时,CPU 就切换到内核态,并开始执⾏system_call() 内核函数。

2、外设可屏蔽中断、异常及⾮屏蔽中断Intel x86 通过两⽚中断控制器8259A 来响应15 个外中断源,每个8259A 可管理8 个中断源。

操作系统的中断处理与异常机制

操作系统的中断处理与异常机制

操作系统的中断处理与异常机制在计算机系统中,操作系统起着至关重要的作用,它负责管理和控制计算机硬件资源,提供用户与计算机的交互界面。

而操作系统的中断处理与异常机制是其核心功能之一。

本文将探讨操作系统中断处理与异常机制的原理和作用。

一、中断处理机制中断是操作系统与外部设备进行通信的一种方式,它可以打断正在运行的程序,使操作系统能够及时响应外部设备的请求。

中断的触发通常由硬件设备或软件指令发起。

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。

第9章异常中断处理

第9章异常中断处理

Undef handler outside 32MBytes branch instruction range
SWI Exception handler placed on applicable address boundary
IRQ handler within 32MBytes Branch instruction range
14
向量表指令
0xFFFFFFFF
0x30008000
0x30000000
> 32 Mbytes
0x2000000
< 4 Kbytes
0x1000 0xFFC
0x1C 0x18
Undef Handler SWI Handler
IRQ Handler 0x30008000 FIQ Handler B IRQ_handler
20
软中断
用户程序 (C/ASM)
SWI 0x01
向量表
SWI 处理程序 (ASM)
SWI 处理程序
(C)
用户程序调用 SWI
SWI 中断处理程序包含汇编部分和可选用 的 C 部分
AAsssseemmbbllee LLanguaaggee ooffAARRMM
(可选)
21
9.4.2 SWI异常中断调用
未定义指令中止模式 (und) 系统模式(sys)
描述
正常程序执行的模式
用于高速数据传输或通道处理
用于通用的中断处理
供操作系统使用的保护模式(复位或软中断)
当数据或指令预取终止时进入该模式,可用于 虚拟存储及存储保护。 当未定义的指令执行时进入该模式,可用于支 持通过软件仿真硬件的协处理器。
用于运行具有特权级的操作系统任务。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.ARM异常中断处理概述1、中断的概念中断是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。

因硬件原因引起的中断过程的出现是不可预测的,即随机的,而软中断是事先安排的。

2、中断源的概念我们把可以引起中断的信号源称之为中断源。

3、中断优先级的概念ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(Prefetch Abort)、软件中断(SWI)和未定义指令异常(Undefined instruction)二.ARM体系异常种类下面是ARM的7种异常当异常发生时,处理器会把PC设置为一个特定的存储器地址。

这一地址放在被称为向量表(vector table)的特定地址范围内。

向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。

当异常产生时, ARM core:拷贝CPSR 到SPSR_<mode>设置适当的CPSR 位:改变处理器状态进入ARM 状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到LR_<mode>设置PC 为相应的异常向量返回时, 异常处理需要:从SPSR_<mode>恢复CPSR从LR_<mode>恢复PCNote:这些操作只能在ARM 态执行.当异常发生时,分组寄存器r14和SPSR用于保存处理器状态,操作伪指令如下。

R14_<exception_mode> = return linkSPSR_<exception_mode> = CPSRCPSR[4∶0] = exception mode numberCPSR[5] = 0 /*进入ARM状态*/If <exception_mode> = = reset or FIQ thenCPSR[6] = 1 /*屏蔽快速中断FIQ*/CPSR[7] = 1 /*屏蔽外部中断IRQ*/PC = exception vector address异常返回时,SPSR内容恢复到CPSR,连接寄存器r14的内容恢复到程序计数器PC。

注:cortex-A8系统中支持通过设置CP15的c12寄存器将异常向量表的首地址设置在任意地址。

例如:mcr p15, 0, r0, c12, c0, 01.复位异常当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。

复位异常中断通常用在下面两种情况下。

系统上电。

系统复位。

当复位异常时,系统执行下列伪操作:R14_svc = UNPREDICTABLE valueSPSR_svc = UNPREDICTABLE valueCPSR[4∶0] = 0b10011 /*进入特权模式*/CPSR[5] = 0 /*处理器进入ARM状态*/CPSR[6] = 1 /*禁止快速中断*/CPSR[7] = 1 /*禁止外设中断*/If high vectors configured thenPC = 0xffff0000ElsePC = 0x00000000复位异常中断处理程序的主要功能:∙设置异常中断向量表。

∙初始化数据栈和寄存器。

∙初始化存储系统,如系统中的MMU等。

∙初始化关键的I/O设备。

∙使能中断。

∙处理器切换到合适的模式。

∙初始化C变量,跳转到应用程序执行。

2.未定义指令异常当ARM处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正执行这条指令。

若协处理器没有相应,则发生未定义指令异常当未定义异常发生时,系统执行下列的伪操作:r14_und = address of next instruction after the undefined instructionSPSR_und = CPSRCPSR[4∶0] = 0b11011 /*进入未定义指令模式*/CPSR[5] = 0 /*处理器进入ARM状态*//*CPSR[6]保持不变*/CPSR[7] = 1 /*禁止外设中断*/If high vectors configured thenPC = 0xffff0004ElsePC = 0x000000043.软中断SWI软中断异常发生时,处理器进入特权模式,执行一些特权模式下的操作系统功能。

软中断异常发生时,处理器执行下列伪操作。

r14_svc = address of next instruction after the SWI instructionSPSR_und = CPSRCPSR[4∶0] = 0b10011 /*进入特权模式*/CPSR[5] = 0 /*处理器进入ARM状态*//*CPSR[6]保持不变*/CPSR[7] = 1 /*禁止外设中断*/If high vectors configured thenPC = 0xffff0008ElsePC = 0x000000084.预取指令异常预取指令异常是由系统存储器报告的。

当处理器试图去取一条被标记为预取无效的指令时,发生预取异常。

如果系统中不包含MMU时,指令预取异常中断处理程序只是简单地报告错误并退出。

若包含MMU,引起异常的指令的物理地址被存储到内存中。

预取异常发生时,处理器执行下列伪操作:r14_svc = address of the aborted instruction + 4SPSR_und = CPSRCPSR[4∶0] = 0b10111 /*进入特权模式*/CPSR[5] = 0 /*处理器进入ARM状态*//*CPSR[6]保持不变*/CPSR[7] = 1 /*禁止外设中断*/If high vectors configured thenPC = 0xffff000CElsePC = 0x0000000C5.数据访问中止异常数据访问中止异常是由存储器发出数据中止信号,它由存储器访问指令Load/Store产生。

当数据访问指令的目标地址不存在或者该地址不允许当前指令访问时,处理器产生数据访问中止异常。

当数据访问中止异常发生时,处理器执行下列伪操作。

r14_abt = address of the aborted instruction + 8SPSR_abt = CPSRCPSR[4∶0] = 0b10111CPSR[5] = 0/*CPSR[6]保持不变*/CPSR[7] = 1 /*禁止外设中断*/If high vectors configured thenPC = 0xffff000C10ElsePC = 0x00000010当数据访问中止异常发生时,寄存器的值将根据以下规则进行修改:①返回地址寄存器r14的值只与发生数据异常的指令地址有关,与PC值无关②如果指令中没有指定基址寄存器回写,则基址寄存器的值不变③如果指令中指定了基址寄存器回写,则寄存器的值和具体芯片的Abort Models有关,由芯片的生产商指定④如果指令只加载一个通用寄存器的值,则通用寄存器的值不变⑤如果是批量加载指令,则寄存器中的值是不可预知的值⑥如果指令加载协处理器寄存器的值,则被加载寄存器的值不可预知6.外部中断IRQ当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断IRQ异常。

系统中各外部设备通常通过该异常中断请求处理器服务。

当外部中断IRQ发生时,处理器执行下列伪操作。

r14_irq = address of next instruction to be executed + 4SPSR_irq = CPSRCPSR[4∶0] = 0b10010 /*进入特权模式*/CPSR[5] = 0 /*处理器进入ARM状态*//*CPSR[6]保持不变*/CPSR[7] = 1 /*禁止外设中断*/If high vectors configured thenPC = 0xffff0018ElsePC = 0x000000187.快速中断FIQ当处理器的快速中断请求引脚有效且CPSR寄存器的F控制位被清除时,处理器产生快速中断请求FIQ异常。

当快速中断异常发生时,处理器执行下列伪操作。

r14_fiq = address of next instruction to be executed + 4SPSR_fiq = CPSRCPSR[4∶0] = 0b10001 /*进入FIQ模式*/CPSR[5] = 0CPSR[6] = 1CPSR[7] = 1If high vectors configured thenPC= 0xffff001cElsePC = 0x0000001c三.ARM异常的优先级四.ARM 处理器模式和异常ARM处理器异常及其对应的模式:每一种异常都会导致内核进入一种特定的模式。

也可以通过编程改变CPSR,进入任何一种ARM处理器模式。

注:用户模式和系统模式是仅有的不可以通过异常进入的两种模式,也就是说,要进入这两张模式必须通过编程改变CPSR五.ARM 异常响应和处理程序返回1.中断响应的概念中断响应大致可以分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。

Sub lr, lr, #4Stmfd sp!, {r0-r12, lr}2、寻找中断入口,根据不同的中断源所产生的中断,查找不同的入口地址。

Bl c_irq_handler3、执行中断处理程序。

可以写在main函数中4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。

Ldmfd sp!, {r0-r12, pc}^2.ARM异常响应流程1.判断处理状态2.向量表跳转指令B的跳转范围为±32MB,但很多情况下不能保证所有的异常处理函数都定位在向量的32MB范围内,需要更大范围的跳转,而且由于向量表空间的限制,只能由一条指令完成。

具体实现方法有下面两种。

(1)MOV PC,#imme_value 这种办法将目标地址直接赋值给PC。

但这种方法受格式限制不能处理任意立即数。

这个立即数由一个8位数值循环右移偶数位得到。

(2)LDR PC,[PC+offset] 把目标地址先存储在某一个合适的地址空间,然后把这个存储器单元的32位数据传送给PC来实现跳转。

这种方法对目标地址值没有要求。

但是存储目标地址的存储器单元必须在当前指令的±4KB空间范围内。

注意:在计算指令中引用offset数值的时候,要考虑处理器流水线中指令预取对PC值的影响。

3.从异常处理程序中返回1.恢复被中断程序的处理器状态PC和CPSR的恢复可以通过一条指令来实现,下面是3个例子。

相关文档
最新文档