Vxworks中断服务程序解析

Vxworks中断服务程序解析

中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pcilntConnect要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。pcilntLib.c中的代码清楚的说明了这个问题: void pciInt (int irq ){

PCLlNT RTN *pRtn;

for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]);

pRtn!=NULL;

pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node))

(*pRtn->routine) (pRtn->parameter);

}

当PCI总线上有中断发生时,系统调用void pcilnt(int irq)函数,再由pciInt使用内部的链表来依次调用挂在该中断上的ISR。如果某个ISR不能正常退出,就会影响到其它ISR的运行。在调试时为了检查中断向量是否已经和ISR可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。在硬件确定的情况下,可以小心设计保证各个硬件使用不同的中断,这样对PCI上的设备也可直接使用intConnect来挂中断。

需要说明的是ISR挂上中断向量的过程不是简单的在向量表中设置中断向量值。VxWorks除了设置中断向量值以外,还在与中断向量相连的ISR加上了一层薄薄的包装,包括IsR执行前保存寄存器值.设置堆栈以及IsR执行后恢复寄存器和堆栈。在中断频繁的场合,系统中中断堆栈有可能被耗尽而溢出。为了避免上述情况发生,必须修改系统的中断堆栈大小,即在config.h中加入以下代码:

#define INCLUDE_KERNEL

#define ISR_STACK_SIZE 0xl000 //表示系统中中断堆栈的大小为4k

由于中断处理程序的特殊性,中断处理程序中不能使用可能导致阻塞的函数,如printf,semTake等,具体不可使用的函数列表可以在中查到。有时候为了调试方便,希望在ISR中打印一些信息,系统提供了一个与prinf等价的函数sysLog,该函数可接受 7个参数。它是非阻塞的。比较而言,prinf函数要在打印任务完成后才返回,sysLog只把打印任务放到系统的打印队列中就返回。在ISR中虽然不可以使用semTake,但可以使用semGive(互斥类型的除外)。一般使用semTake和semGive在ISR和普通程序间通信:当一个中断产生,ISR 完成必要的任务后,调用semGive通知另外一个使用semTake等待ISR信号的任务,该任务收到semGive释放的信号后,继续完成ISR中不便处理的任务。

Vxworks中断服务程序解析

中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pcilntConnect要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。pcilntLib.c中的代码清楚的说明了这个问题: void pciInt (int irq ){

PCLlNT RTN *pRtn;

for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]);

pRtn!=NULL;

pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node))

(*pRtn->routine) (pRtn->parameter);

}

当PCI总线上有中断发生时,系统调用void pcilnt(int irq)函数,再由pciInt使用内部的链表来依次调用挂在该中断上的ISR。如果某个ISR不能正常退出,就会影响到其它ISR的运行。在调试时为了检查中断向量是否已经和ISR可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。在硬件确定的情况下,可以小心设计保证各个硬件使用不同的中断,这样对PCI上的设备也可直接使用intConnect来挂中断。

需要说明的是ISR挂上中断向量的过程不是简单的在向量表中设置中断向量值。VxWorks除了设置中断向量值以外,还在与中断向量相连的ISR加上了一层薄薄的包装,包括IsR执行前保存寄存器值.设置堆栈以及IsR执行后恢复寄存器和堆栈。在中断频繁的场合,系统中中断堆栈有可能被耗尽而溢出。为了避免上述情况发生,必须修改系统的中断堆栈大小,即在config.h中加入以下代码:

#define INCLUDE_KERNEL

#define ISR_STACK_SIZE 0xl000 //表示系统中中断堆栈的大小为4k

由于中断处理程序的特殊性,中断处理程序中不能使用可能导致阻塞的函数,如printf,semTake等,具体不可使用的函数列表可以在中查到。有时候为了调试方便,希望在ISR中打印一些信息,系统提供了一个与prinf等价的函数sysLog,该函数可接受 7个参数。它是非阻塞的。比较而言,prinf函数要在打印任务完成后才返回,sysLog只把打印任务放到系统的打印队列中就返回。在ISR中虽然不可以使用semTake,但可以使用semGive(互斥类型的除外)。一般使用semTake和semGive在ISR和普通程序间通信:当一个中断产生,ISR 完成必要的任务后,调用semGive通知另外一个使用semTake等待ISR信号的任务,该任务收到semGive释放的信号后,继续完成ISR中不便处理的任务。


相关文章

  • 基于PowerPC440GP型微控制器的嵌入式系统设计
  • 摘要:介绍一种新型PowerPC440GP型32住高性能微控制器,提出一种基于PowerPC440GP的网络服务器嵌入式系统硬件设计方案并给出部分设计细节,然后讨论基于此硬件平台的嵌入式操作系统VxWorks的开发.移植及BSP引导程序的开 ...查看


  • 常见的嵌入式操作系统
  • 常见的嵌入式操作系统 分类: 嵌入式 操作系统2012-12-11 10:06 459人阅读 评论(1) 收藏 举报 嵌入式操作系统 嵌入式操作系统与通用的操作相比较主要特点在于: 1.小内核,稳定可靠. 2.需要可装卸.可裁剪,以便能灵活 ...查看


  • 嵌入式软件开发之我见
  • 2009-06-23 09:16:54 标签:系统 嵌入式 休闲 想法 看法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yunli.blog.51cto.com/8 ...查看


  • 计算机三级嵌入式习题整理
  • 集成电路的工作速度主要取决于组成逻辑门电路的晶体管的尺寸.晶体管的尺寸越小,其极限工作频率越高,门电路的开关速度就越快. 在linux OS中,用"任务"替代"进程",而没有"进程" ...查看


  • 嵌入式系统习题
  • 第一题:判断题 1. 在ARM 处理器中,快速中断(FIQ )的优先级高于外部中断(IRQ ).T 2.ROM能够永久或半永久地保存数据,ROM 内的数据永远不会丢失.F 3. 嵌入式ARM 架构的嵌入式处理器同时支持大端.小端(Big/L ...查看


  • 嵌入式实时操作系统分类
  • 嵌入式实时操作系统分类 VxWorks 嵌入式操作系统 VxWorks系统是由美国WindRiver 公司设计创建的产品,是目前所有嵌入式实时操作系统中应用较为广泛且市场占有率较高的系统.这个实时操作系 统是由400多个相对独立.短小精悍的 ...查看


  • 嵌入式软件人才的培养
  • [摘 要]随着信息产业和微电子技术的发展,嵌入式技术已经成为了最热门的技术之一,应用范围遍及我们日常生活的各个角落.于是全社会展开了学习嵌入式技术的热潮,嵌入式技术以不可阻挡的趋势走进了大学校园. [关键词]嵌入式:嵌入式人才:培养 [中图 ...查看


  • 实时性改善措施
  • 一.实时操作系统定义 1.实时操作系统 实时操作系统(RTOS )是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统 ...查看


  • WinCE的实时性
  • 提到WinCE及工业控制,也许有人对WinCE的实时性能否满足工业控制要求产生疑问.诚然,WinCE的实时性不如QNX,也不如VxWOrks,但是大量文献表明WinCE的确是嵌入式实时操作系统,也在工业控制市场占有相当的份额.究其原因,离不 ...查看


热门内容