Vx Works中的中断应用设计要点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

收稿日期:2004-08-02

作者简介:耿 锐(1975—

),男,安徽淮南人,硕士研究生,研究方向为嵌入式系统应用。

VxWorks 中的中断应用设计要点

耿 锐,王 闵

(西安电子科技大学计算机学院,陕西西安710071)

摘 要:硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要。文中以VxWorks 操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题。由于软硬件的相关性,选用广泛应用的X86架构的嵌入式计算机为硬件平台,对Pentium CPU 和计算机主板对硬件中断的管理机制也做了详细介绍。所得出的研究结论在具体的开发项目中均得以验证,可供相关技术人员参考。关键词:实时操作系统;VxWorks ;中断

中图分类号:TP311 文献标识码:A 文章编号:1005-3751(2005)05-0122-03

Main Points on Interrupt Application Design in VxWorks

GEN G Rui ,WAN G Min

(School of Computer ,Xidian University ,Xi ’an 710071,China )

Abstract :Hardware interrupt management is a key problem in real time system and it should be deeply researched by developers to satisfy their job.This paper discusses some important points about interrupt application design in VxWorks.Due to connections between hardware and software ,adopting an embedded computer of X86architecture as hardware platform ,the management mechanism for Pentium CPU and computer main board to hardware interrupt is also introduced detailedly.Conclusion of this paper is checked in practice and can be referenced by developers in related fields.K ey w ords :RTOS ;VxWorks ;interrupt

0 前 言

硬件中断处理是实时系统设计中最重要、最关键的问题。文中综合软硬件,从工程应用的角度对此问题加以讨论。文中所述内容针对的软件平台是VxWorks 实时操作系统,硬件平台选用广泛使用的X86架构的嵌入式计算机,全文按照CPU 、主板、操作系统自下而上的顺序展开。

1 Pentium CPU 的中断类型

有两类事件可引起Pentium 挂起当前的指令流,即中断和异常。中断是由外部事件引发的,在程序执行的任何时刻都可能出现;异常也称异常中断,是由内部事件引发的。中断和异常各有两类触发源:

(1)中断。

可屏蔽中断:CPU 的IN TR 引脚收到有效信号,如果

Pentium 标志寄存器IF 位为1,则允许中断,否则信号在CPU 内被屏蔽。

非屏蔽中断:CPU 的NMI 引脚收到有效信号而引发的中断,这类中断不能被阻止。

(2)异常。

执行异常:CPU 试图执行一条指令的过程中出现错误、故障等不正常条件而引发的异常中断。

执行软件中断指令:Pentium 指令系统中包括一些如

IN TO ,IN T n 这类软件中断指令,执行时产生异常中断。

详细分类的话,Pentium 可以识别256种中断和异常。每种中断给予一个编号,即0~255,称为中断向量号

(interrupt vector number )。其中NMI 、异常以及系统保留

占用中断向量号0~31,而32~255为用户中断向量号,可供IN TR 和自定义软件中断(如汇编中的IN T 指令)使用。

2 Pentium CPU 的中断响应过程

中断处理子程序的入口地址信息存于内存中的一个表内,实模式为中断向量表IV T ,保护模式为中断描述符表IDT 。中断发生时,CPU 首先通过某种方式获得中断向量号,再以中断向量号检索此表,即可获取中断服务子程序入口地址,详述如下:

(1)实模式使用中断向量表。

中断向量表IV T 的基地址由IDTR (中断描述符寄存器)指定,大小为1kB 。中断响应时的查表过程与8086/

8088一致,在此不再赘述。

第15卷 第5期2005年5月 微 机 发 展Microcomputer Development Vol.15 No.5May 2005

(2)保护模式使用中断描述符表。

中断描述符表(IDT )的基地址也由IDTR 指定,大小为2kB 。中断描述符表每一表项对应一个中断向量号,但表项称为中断门描述符或陷阱门描述符。这些门描述符为8字节长,对应256个中断向量号。以中断向量号乘以

8作为访问IDT 的偏移,读取相应的中断门/陷阱门描述

符表项。门描述符给出中断服务子程序入口地址(段:偏移),其中32位偏移量装入EIP ,16位的段值被装入CS 寄存器。但此段值是选择符,CPU 会自动查G DT 或LDT 取得代码段描述符并送到相应的描述符寄存器中。

3 X 86架构的计算机对外部中断的管理

在嵌入式应用中,人们感兴趣的主要是指由硬件信号触发的非屏蔽中断与可屏蔽中断。在单CPU 的X86计算机中,采用两片8259级联来管理16个可屏蔽外部中断,由于主8259的IRQ2用于级联,所以实际可用的IRQ 只有15个,其中又有一些被系统占用,

这种逻辑如今已被集成在主板芯片组的南桥中,如图1所示。由于传统的PIC 提供的中断资源较少,现代PC 开始采用APIC (高级可编程中断控制器)管理外部中断,它的一个显著优点是能够扩充系统可用的IRQ 资源。文中问题的讨论基于传统的

PIC 结构。

图1 外部中断管理逻辑

4 在VxWorks 中设计中断应用

VxWorks 运行在保护模式下。在VxWorks 中,可以

采用intConnect 关联中断服务程序至某个中断向量[1]。然而intConnect 并不是直接将用户设计的ISR 与中断门描述符相关联,而是对它加了一层封装,然后将封装代码的内存首地址与中断门描述符相关联[2],

中断响应过程如图2所示。采用intConnect 为ISA 总线设备关联中断服务程序IRQ -ISR 至IRQ10的程序片断如下:

#define IRQNum 10/313/

……/32,33/

if (intConnect ((VOIDFUNCPTR )INUM -TO -IVEC (IRQNum +0x20),IRQ -ISR ,0)O K )

{

if (sysInt EnablePIC (IRQNum )O K )/343/

{

printf (“Succeeded.\n ”

); }}

void IRQ -ISR (){

int intLock K ey ;

intLock K ey =intLock ();/353/ …(critical section ) intUnlock (intLock K ey );}

图2 中断响应过程

程序要点详述:

①X86架构的计算机中,一些中断资源已经固定地分配给某些外部设备,如系统时钟固定使用IRQ0,所以在选择中断号时首先应参考硬件手册,避免与已用的中断资源冲突。选定中断号后,需要在BIOS 中加以设置,避免

BIOS 在初始化时,把此中断号作为可用资源分配给PCI

设备,造成中断冲突。以上是在开发ISA 设备时要注意的,若开发PCI 设备,一般不做上述考虑,因为BIOS 可为

PCI 设备动态分配中断资源,且多个PCI 设备可共享一个

321・第5期 耿 锐等:VxWorks 中的中断应用设计要点

相关文档
最新文档