嵌入式系统的异常和中断
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大多数嵌入式处理器体系结构提供异常和中断机制,允许处理器中断正常的执行路径。这个中断可能有应用软件有意的触发,或者由一个错误的、不寻常的条件或某些非计划的外部事件触发。
许多实时操作系统提供处理异常和中断的封装器功能,以便保护嵌入式系统开发者避开低层的细节。这种应用编程层允许程序员把精力集中在必须处理的高层异常处理上,而不是在处理那些冗长的序言和结束语的系统层次上。然而,当程序员从一个嵌入式应用程序员过渡到一个嵌入式系统程序员的时候,这种隔离可能产生误会并且变成一种障碍。
一、什么是异常和中断
一个异常是指任何打断处理器正常执行,并且迫使处理器进入一个由有特权的特殊指令执行的事件。异常可以分为两类:同步异常和异步异常。
由内部事件(像处理器指令运行产生的事件)引起的异常称为同步异常。同步异常的例子包括下列各项:
1.在某些处理器体系结构中,对于确定的数据尺寸必须从内存的偶数地址进行读和写操作。从一个奇数内存地址的读或写操作将引起存储器存取一个错误事件并引起一个异常(称为校准异常)。
2.造成被零除的算术运算引发一个异常。
由外部事件(与处理器指令执行不相关的事件)引发的异常,称为异步异常。一般,这些外部事件与硬件信号相关。这些硬件信号典型的来源于外部硬件装置。异步异常的例子包括下列各项:
1.按下嵌入式板上的复位按钮,触发一个异步的异常(称为系统复位异常)。
2.另外一个外部设备的例子是,通信处理器模块已经成为许多嵌入式设计的一个完整部分,当它接收数据包时引发异步异常。
一个中断,有时称为一个外部中断,是一个由外部硬件装置产生的事件引起的异步异常。中断是异常的一类。中断区别于其它类型的异常,或更精确地说,同步异常区别于异步异常的地方是事件的来源。同步异常事件是由于执行某些指令而从处理器内部产生的。而异步异常事件的来源是外部硬件装置。
异常和中断是大多数嵌入式系统中必须存在的精灵。这个设施是处理器体系结构特定的;如果误用,将成为混乱的设计源。而异常和中断引入了挑战性的复杂化设计并且强化了严格的代码需求,它们在嵌入式应用程序中几乎是不可缺少的。
二、异常和中断的应用
从应用的观点看,异常和外部中断提供一个设施使嵌入式硬件(处理机内部或外部的)得到应用代码的注意。中断是硬件与一个当前在嵌入式处理器上运行的应用程序之间通信的一种方法。
一般来讲,异常和中断可在三个方面帮助嵌入式工程师:
1.内部错误和特殊条件的管理;
2.硬件并发;
3.服务请求管理。
2.1 内部错误和特殊条件的管理
对大范围的错误进行处理和适当复原而且不能导致停机,是嵌入式系统应用领域所必需的。
异常是在处理器执行指令时,探测发现的错误条件或特殊条件。错误条件的发生可以由多种原因引起,如一些未预料到的条件引起的被零除、溢出或其他数学错误等等。特殊条
件是由特别的指令产生的异常。这些指令允许程序迫使处理器进入特权的运行模式,结果得到对一个特权指令组的访问。
虽然不是所有的微控制器或嵌入式处理器都定义相同类型的异常或以相同的方式进行处理,但总是有一个可用的异常设施,并且帮助系统工程师对这些内在错误和特殊条件设计一个可控的响应。
2.2 硬件并发与服务请求管理
同时执行不同类型工作的能力对于嵌入式系统是十分重要的。许多外部的硬件装置可以与核心处理器并行的执行装置特定的操作。这些装置要求来自核心处理器的干扰最小。并发的关键是知道处理器装置何时已经完成先前的工作,以便于可以分配另外的工作。外部中断用来实现这个目标。
外部中断的另一种用法是提供一个通信机制给嵌入式处理器发信号,或者提醒它这里有一个外部硬件装置正在请求服务。
异常及其近亲——外部中断的能力,增强了嵌入式的设计。然而,在嵌入式设计中使用一般的异常设施,需要依照每个特定的一般异常的来源和相关的原因,适当的处理一般异常。
三、近距离看异常的中断
一般异常具有分类并且给予分类给定优先权。在外部中断中,很可能有其他等级的优先权,它们是中断硬件强加和强制的。了解引起一般异常的硬件来源,实现控制传递的硬件以及决定控制向量驻留在哪里的机制,是适当地安装一般异常处理程序并且正确的编写一般异常处理程序的关键
3.1 可编程中断控制器和外部中断
大多数嵌入式设计具有不止一个外部中断源,被冠以优先权。为理解处理过程,必须清楚地理解可编程中断控制器PIC的概念。
PIC是实现依赖的。它能以多种形式出现,且有时给予不同的名字。然而,它全部服从于相同的目的,并且提供两个主要的功能:
1.给多个中断来源优先权,以便将最高优先级中断随时送到核心处理器中处理。
2.使用需要的进程判断中断的准确来源,降低核心CPU的负载。
理解中断源的优先权,可是嵌入式系统程序员能够更好地理解嵌套中断的概念。这个术语表示较高优先权中断源可以抢占一个较低优先级的中断处理。如果这个中断表全部按系统优先权排序,则很容易看出较高优先权中断如何影响较低优先权的中断源以及它们的运行时间和频度。这个信息有助于嵌入式系统程序员设计和实现更好的允许嵌套中断的ISR。
中断表的最大频度栏叙述放置在ISR上的、对全部系统影响最小的处理时间约束中。
向量地址栏叙述了将ISR安装到内存的什么地方。处理器自动的从基于中断编号的已知地址之一中取得指令,IRQ栏指定中断编号。这个指令开始中断特定的服务例程。一般说来,向量表也覆盖同步异常的服务例程。服务例程也简称向量。
3.2 一般异常的分类
虽然不是所有的嵌入式处理器都以相同的方式实现异常,但是大部分新近的处理器都具有下面的异常类型:
1.异步-不可屏蔽的(asynchronous – non – maskable);
2.异步-可屏蔽的(asynchronous – maskable);
3.同步-精确的(synchronous – precise);
4.同步-不精确的(synchronous – imprecise)。