嵌入式实时系统中断管理技术研究
关键词:实时性 中断 中断管理模式 嵌入式实时系统
引 言
??嵌入式实时系统(Real-Time System)是一个能够在指定或者确定的时间内对外部事件作出响应的系统,其重要的特性是实时响应性。
嵌入式实时系统对外部事件的响应一般都是通过中断来处理的,其对中断的处理方式,直接影响到系统的实时性能。
1 嵌入式内核的中断管理模式
1.1 简 介
实时多任务操作系统是嵌入式应用开发的基础平台。早期的嵌入式实时应用软件直接在处理器上运行,没有RTOS支持,现在的大多嵌入式应用开发都需要嵌入式操作系统的支持。实际上,此时的嵌入式操作系统相当于一个通用而复杂的主控程序,为嵌入式应用软件提供更强大的开发平台和运行环境。因为嵌入式系统已经将处理器、中断、定时器、I/O等资源包装起来,用一系列的API提供给用户,应用程序可以不关注底层硬件,直接借用操作系统提供的功能进行开发,此时的嵌入式操作系统可以视为一个虚拟机。
随着嵌入式实时系统的发展,为了方便对中断的处理,系统内核常接管中断的处理,比如提供一些系统调用接口来安装用户的中断,提供统一的中断处理接口等。根据系统内核的可抢占或者非抢占性,系统内核接管中断又有两种不同处理模式,如图1。
图1
在非抢占式内核的中断处理模式中,当在中断处理过程中有高优先级任务就绪时,不会立即切换到高优先级的任务,必须等待中断处理完后返回到被中断的任务中,等待被中断的任务执行完后,再切换到高优先级任务。在抢占式内核的中断处理模式中,如果有高优先级任务就绪时,则立刻切换到高优先级的任务。抢占式内核中断处理模式下的时序如图2。
在时序图中,符号A表示有高优先级任务N就绪。这种处理模式有利于高优先级任务的处理,但相应地延长了被中断的低优先级任务的执行时间。
1.2 嵌入式内核接管中断的处理机制
嵌入式内核接管中断的处理机制主要包括两个部分:面向应用的编程接口部分和面向底层的处理部分。面向用户应用的编程接口的任务之一是供支持用户安装中断处理例程。面向底层处理部分可以分为两个部分:中断向量表部分和中断处理部分。中断向量表部分主要指中断向量表的定位和向量表中表项内容的形式,一般在嵌入式内核中都提供一个中断向量表, 其表项的向量号应与处理器中所描述的向量对应;向量表表项的内容形式一般有两种形式。最常见的形式就是在具体的向量位置存储的是一些转移程序,转到具体的中断处理部分;另一种形式也就是中断向量位置存放具体的中断处理程序,此仅针对向量号之间彼此有一定的距离,此距离足以存放中断处理程序。面向底层部分的中断处理部分,是整个嵌入式内核中断管理的核心,在后面有详细的分析。
(凹丫丫范文网fanwen.oyaya.net收集整理)
对于嵌入式内核中断管理模式图中的中断处理部分,以Delta OS内核为例,详细说明其中断处理部分。Delta OS内核中断处理部分采用了“统一接管”的思想,即Delta OS 为所有的外部中断都提供一个统一的入口_ISR_Handler。此入口的主要功能是保护中断现场,执行用户的中断服务程序,判断是否允许可抢占调度,中断现场的恢复等。Delta OS内核中断处理的流程如图3。
从Delta OS内核中断处理流程图中,可看出嵌入式内核中一些专用的处理方式。
① 在嵌入式内核中一般有两个堆栈:系统栈和任务栈。系统栈是系统为中断上下文处理而预留的堆栈;任务栈属于任务本身的私有堆栈,用来存储任务执行过程中一些临时变量等信息。因为中断上下文不隶属于任何任务的上下文中,所以嵌入式内核一般都有一个系统栈专门处理中断上下文的。当产生中断且非中断嵌套时,堆栈由被中断任务中的任务栈切换到系统栈;当在中断处理中又发生中断时,堆栈不再切换,仍用系统栈;当退出最外层中断时,堆栈又由系统栈切换到被中断的任务中的任务栈。
② 一般嵌入式内核有两种形式:抢占式和非抢占式。为了更好地支持系统的实时性,很多嵌入式实时内核都是抢占式内核,如Vxworks、pSOS 等。从上面Delta OS 内核中断处理流程可知Delta OS是抢占式内核。因为在中断处理中,当检测到有高优先级任务就绪时,就会切换到高优先级任务里,而不是等到退出中断后,再进行任务调度。
③ 在嵌入式内核中,中断时机和调度时机直接影响到系统的实时性。关中断的时机一般在执行核心操作之前。核心操作包括对链表的操作,对核心数据项(如指示同步,反应重要信息状态)的修改等场合都须关中断。执行完相应的核心操作后,就可以开中断。开调度时机主要提供重新调度的机会,一般在执行操作系统核心调用前关调度,执行完后开调度。系统中开关中断与开关调度的关系大致如下:
开关中断的粒度
《嵌入式实时系统中断管理技术研究》