VxWorks中的中断应用设计要点
VxWorks下基于ML507嵌入式系统的中断处理
虚拟仪表的 G U板卡, P 采用 V wok 作为顶层控制 , x r s
其中采用中断机制与外界通信是一个重要手段 , 由于 硬件环境为 Vr x X ie5F T型号的 F G C U为 IM公 t P A,P B
司 Pw r 4 05处理器 , oe c4 x p 理解其特有 的架构 , 并编写 相应的中断处理程序 , 对于操作系统 的完整移植 以及 上层 程序 的正 常运行 至关 重要 。
b d e p r t g s se Vx 0 k k s i p si l o ce t r o l ae m e d d p af r T e i tru t e d d o e ai y t m W r s ma e t o sb e t r ae a moe c mpi t d e n c b d e ltom. h n er p h di gm e h im r vd d b W o k so ih p ro ma c n rd cn ae c wh c sa c r e t h e n a ln c a s p o i e yVx r si fhs ef r n ei e u i gltn y, n ih i c o d dwih te r— a tme e ur me t I t i p p r t e itru t h n l g me h im b s d o P wepc 4 p o e s r i l i r q i e n . n hs a e , h n er p a di n ca s n ae n o r 40 rc so s a ay e . e n lz d Th n, t e po e so tru th n ln rg a h r c s fi er p a d ig p o rmmig i e c b d i eal n n sd s r e n d ti i . K e wo d Vx 0 k ; Po r c 4 y rs W rs wep 4 0; itru th n ln ner p a di g; i tru ts rie ru ie ner p evc o tn
总结使用中断的嵌入式应用层程序设计方法
总结使用中断的嵌入式应用层程序设计方法下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, 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 and writing methods, please pay attention!使用中断的嵌入式应用层程序设计方法在嵌入式系统中,中断是一种重要的事件处理机制,可以及时响应外部事件或者内部条件,提高系统的实时性和效率。
Vxworks基于S3C44B0X处理器的中断处理设计
⑥
20 Si eh E gg 0 7 c.T c . nn .
V w rs x ok 基于 S 4 O 3 4 B X处理 器的 C 中断处理设计
徐 伟 鞠晓东
( 中国石油大学资源与信息学 院, 北京 124 ) 0 29
摘
要
嵌入式微处理器和嵌入式实时操作 系统是嵌入式 系统 的两大核心技 术。详细分析 了 wn i r 司的嵌入 式实时 i Rv 公 d e
表 1 S C 4 O 异 常 向 量 表 3 4B X
中断向量入 口地址
异常中断类 型
st、 e)未定义指令 ( nendIsutn 、 U df e t co ) 软件 中断 i nr i
(WI 、 取 中止 ( ree br) 数 据 中止 ( a S )预 Pe t aot 、 f h Dt a
IU 将 中 断 号 ( u e) 换 成 中 断 向量 地 N M nmbr 转
址 , IU — O IE 宏 N M T —V C则将中断向量地址转换为中
断号 。宏 定 义在 iAc. v r h中实 现 。 h
根据指定 的配置参数完成 。为能够处理最 坏情况 下的中断嵌套 , 必须分配足够大的中断堆栈空间。
2 V w rs x ok 中断处理机制
硬 件 中断 处 理 是 实 时 操 作 系 统 中最 重 要 的部
研究方 向: 智能检测技 术。
维普资讯
1 8期
徐
伟 , : x ok 基 于 ¥ C 4 O 等 V w rs 3A B X处理器的 中断处理设计
V w rs中断处 理 完成 以下 工 作 : 存 C U 中 x ok 保 P 断 的上下文 、 调用 中断服 务程 序 (S 、 IR) 中断服 务 程 序 返 回后 , 恢复 中断 的上下 文 。
VxWorks实时操作系统中的中断处理机制分析
公司 的 S H等 , 目前 已经被 广泛 的应用 在 航 空航 天 、 军事 、 工业 控制 、 网络 管理等 领域 。 嵌入 式 系 统通 过 中断 与外 界 进行 交 互 , 操作 系
统通过 中断处理 响应 外 部事 件 , 中断 处 理 的正 常 运 行是系统 正常运 行 的先 决条件 。 中断处理 也是 影 响
和 P w rC、 P 、 R Itl 司 的 i6 、 i c i oe P MIS A M、ne 公 90 Ht h a
1 V Wok x rs系统 中 的 中 断处 理
通 常处 理 器 的 中断分 为两 级 , 内部 中断 和外 即 部 中断 。V Wok 为它们 提供 了安全 、 x rs 快捷 、 活 的 灵 处 理机制 。
V Wok 实时操作 系统中的中断处理机制分析 x rs
王运盛 王 , 坚2
(. 1 中国西南电子技术研究所 , 成都 6 0 3 ; . 10 6 2 总参陆航部驻成 都地 区军事代表室 , 成都 6 03 ) 10 6
摘 要: 针对实时系统中的 中断处理的至关重要性 , 说明 了微处理器的 内部异常和外部 中断的工作 机理, 阐述 了实时操作 系统 V Wo s x r 中的异常处理的过程, k 重点分析 了在 V W rs x o 中外部 中断处理 k
W NG Y n—se g ,W NG Ja A u h n A in
(.otw s C i stt o l t n eh o g , hnd 106C i ; . it yD l a o IS u et h aI tu f e r i T cnl y C egu603 ,hn 2 M l r e gt n h n ni e E c o c o a i ei a O iefr hnd ei , r yA i o pr et f e e l t , hnd 106 C i ) fc eguR g n Am va nD a m n nr a C eg u603 ,h a oC o i t e t oG aS f n
vxworks中断服务程序
vxworks中断服务程序中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。
为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。
一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。
调试中经常采用后一种方式。
在VxWorks中有两个不同的函数可提供挂中断:intCon nect和pciIntConnect。
两者的区别是intConnect使用的中断向量是独占的,pc ilntConnect则可在各个不同的ISR之间共享中断向量。
实际上pcilntConnect内部调用了intConnect函数,在内部使用一个链表来管理多个不同的ISR。
pcil ntConnect要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。
如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。
pcilnt Lib.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)函数,再由pciI nt使用内部的链表来依次调用挂在该中断上的ISR。
如果某个ISR不能正常退出,就会影响到其它ISR的运行。
在调试时为了检查中断向量是否已经和ISR 可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。
vxworks入门实验课
实验九中断处理程序1实验目的1.了解VxWorks的中断机制2.学习编写中断处理程序2实验内容建立基于pentium目标机的project,编写一段简单的键盘中断处理程序,编译成功后,将其加载到VmWare上运行并观察运行结果。
3实验设备及工具1.硬件:a)PC机2.软件:a)PC机操作系统Windows2000或windowsXPb)Tornado2.2c)Vmware5.54实验原理中断处理程序是实时系统的重要组成部分。
系统通过中断机制了解外部事件,并对外部事件做出响应。
实时系统的反映速度取决于系统的中断响应速度和中断处理程序的处理速度。
在VxWorks中编写中断处理程序需要写一个中断服务例程(ISR),并利用VxWorks提供的intConnect调用将它与某个中断相连接。
当中断发生时,Wind 内核将转到ISR中执行。
从中断产生到ISR执行之间的时间延迟,就是所谓的中断响应时间。
由于在很短的时间内,可能产生多个中断,并且高优先级的中断将阻塞低优先级的中断,因此,要尽量使ISR的执行时间最短。
与VxWorks中断管理相关的头文件是intLib.h,这是中断库的头文件。
ISR 不像一般的任务那样运行在普通的任务上下文中,它没有任务控制块,所有的ISR共享一个堆栈。
由于存在上述不同,能在ISR中调用的程序不能发生阻塞。
例如,printf()可能会发生阻塞,因此在ISR中不能调用printf()而应该调用logMsg()或其他由logLib库提供的函数调用。
ISRs也不能使用浮点数指令,因为浮点数指令寄存器在进入中断处理程序时没有保存。
如果一定窑使用浮点数指令,必须首先调用fppALib库中提供的调用保存浮点寄存器。
然而,浮点数操作比较费时,应该尽量避免在ISRs中使用。
常见的情况是一个ISR仅仅调用semGive系统调用,发起一个任务来完成必要的处理。
在下面的例子中简单的处理键盘中断:5实验步骤1.建立基于Pentium目标机的project2.编程(假设编写的源文件为s9_intr1.c)3.将s9_intr1.c添加到project中4.编译(如果有错误,则改正)5.下载到VmWare上运行,观察输出。
xworks时钟与中断_哈尔滨工业大学
嵌入式操作系统
1.3 时间戳(Timestamp)
• 时间戳依附于系统定时器,在 “\target\src\drv\timer\xxxTimer.c”中实现 • 时间戳采用查询方式取得当前定时器的硬件计 数值,去除了中断处理负担,一般能获得比系 统时钟高几十倍的分辨率,这取决于一个tick 包含多少个硬件计数 • VxWorks系统组件中,只有WindView使用了 timestamp来获取高分辨率的时标
PDF 文件使用 "pdfFactory Pro" 试用版本创建
嵌入式操作系统
时钟函数原型
• sysClkConnect()—为系统时钟挂接时钟处理程 序
系统时钟中断处理程序,在usrRoot中调用, 将usrClock挂接到系统时钟中断
• sysClkEnable—使能系统时钟中断
嵌入式操作系统
第5章 VxWorks时钟与中断
PDF 文件使用 "pdfFactory Pro" 试用版本创建
嵌入式操作系统
主要内容
1、时钟管理
– – – – –
系统时钟 辅助时钟 时间戳 看门狗定时器 POSIX定时器
2、中断 3、异常
PDF 文件使用 "pdfFactory Pro" 试用版本创建
PDF 文件使用 "pdfFactory Pro" 试用版本创建
嵌入式操作系统
• VxWorks提供多个库支持时钟接口
–sysLib—提供系统时钟和辅助时钟接口 –tickLib—时钟节拍支持库 –wdLib—看门狗定时器支持库 –timexLib—执行计时接口,可以对任何函数或一组函数 的执行进行计时—常用来测量程序的执行时间 – clockLib—POSIX兼容的时钟库 – timerLib—POSIX兼容的定时器库
VxWorks系统的BSP设计探讨
VxWorks 系统的BSP 设计探讨VxWorks 是一款成熟、高度可靠的实时操作系统,在很多嵌入式系统中被广泛使用。
它的成功离不开其优秀的BSP 设计。
本文将探讨VxWorks 系统的BSP 设计,在硬件抽象层、驱动程序框架、内核配置和调试等方面进行分析和讨论。
硬件抽象层VxWorks 的BSP 设计以硬件抽象层(Board Support Package)为核心,该层是向上层的VxWorks 内核提供硬件访问功能的接口,同时又尽可能的屏蔽底层硬件细节。
硬件抽象层的设计是非常重要的,它直接决定了系统的稳定性和扩展性。
在硬件抽象层的设计中,主要有以下几个方面:1.系统引导:在系统引导时,BSP 需要初始化硬件资源、设置中断向量表、分配内存空间等操作。
2.中断处理:BSP 需要提供可配置的中断处理机制,包括中断向量分配、中断号定义、中断处理程序等。
3.时钟管理:BSP 需要提供时钟的初始化和管理功能,包括时钟频率设置、时钟中断处理程序等。
时钟管理是一个非常重要的功能,影响着整个系统的稳定性和实时性。
4.存储器管理:BSP 需要提供存储器管理的接口,包括物理地址到虚拟地址的映射、内存初始化、页表配置等。
存储器管理的设计对系统性能和可扩展性影响较大。
驱动程序框架在BSP 中,驱动程序是包含一系列驱动程序的框架,是实现硬件抽象层的核心代码。
驱动程序框架的设计是非常重要的,它直接决定了BSP 的可扩展性和驱动程序实现的方便性。
在驱动程序框架的设计中,主要有以下几个方面:1.设备访问:驱动程序框架需要提供设备访问的函数接口,以便于上层应用程序对设备进行访问。
2.设备管理:驱动程序框架需要提供对设备进行管理的函数接口,包括设备的初始化、打开、关闭等。
3.中断处理:驱动程序框架需要提供对中断的处理能力,以便中断服务程序对设备的中断进行处理。
4.线程管理:驱动程序框架需要提供对线程的管理能力,以便于多线程环境下对设备进行并发访问。
vxworks Arm 架构下的中断
vxworks Arm 架构下的中断中断的处理分为三个部分:1、中断检测:arm 架构下,中断监测部分的代码是需要用户自己开发的,可以参考ambaIntrCtl.c,需要实现函数xxxIntLvlVecChk、xxxIntLvlVecAck、xxxIntLvlChg、xxxIntLvlEnable、xxxIntL vlDisable 和xxxIntDevInit,在函数xxxIntDevInit 中把其他几个函数分别挂载在sysIntLvlVecChkRtn、sysIntLvlVecAckRtn、sysIntLvlChgRtn、sysIntLvlEnableRt n 和sysIntLvlDisableRtn 这几个钩子函数上。
xxxIntDevInit 在sysLib.c 中的sysHwInit2 中调用,以初始化中断。
2、中断管理:中断管理部分,BSP 中需要调用两个函数,一个是intLibInit,另一个是xxxIntDevInit。
后者的作用就是前面讲的挂接中断处理钩子函数。
前者intLibInit 是个比较关键的函数,三个参数设置了中断的个数和中断模式。
内部处理中,根据中断的个数申请intVecTable数组,用户使用intConnect 代码挂接的中断就是根据中断向量到表中查找位置然后赋以中断处理函数。
中断模式分可抢占和不可抢占两种,分别对应INT_PREEMPT_MODEL 和INT_NON_PREEMPT_MODEL。
3、中断处理:根据vxWorks 的实现代码,在excArchLib.c 中有一张表:LOCAL EXC_TBL excEnterTbl[NUM_EXC_VECS] = {/* no entry for branch through zero */{ EXC_OFF_UNDEF, excEnterUndef},/* undefined instr */{ EXC_OFF_SWI,excEnterSwi},/* software interrupt */{ EXC_OFF_PREFETCH,excEnterPrefetchAbort}, /* prefetch abort */{ EXC_OFF_DATA,excEnterDataAbort}, /* data abort *//* no entry for old address exception */{ EXC_OFF_IRQ,intEnt},/* interrupt request *//* no entry for FIQ */ };其中EXC_OFF_IRQ 对应的即外部中断,缺省情况下,调用的是intEnt,但是正常运行的时候,BSP 代码在intLibInit 中会使用intIntRtnPreempt 或者。
VxWorks任务调度与中断学步园
VxWorks任务调度与中断学步园最近在看有关任务调度和中断的文章,主要的话题或者讨论点可以归为如下几个递进的问题:(1)引发任务调度的情况、原因(2)何为抢占调度?抢占调度是否就指中断引发的调度?(3)关中断是否禁止任务调度?针对上述问题,本文简单说一下个人的理解,有不妥之处还请大家多指点。
下面就以VxWorks操作系统为例,讨论任务调度和中断的关系。
问题(1)引发任务调度的情况、原因首先,看一下VxWorks任务调度时机的两种情况:1) 同步任务切换引起的原因是当前运行的任务可能执行了如下下列操作:①进行阻塞、延迟、挂起的调用如,调用 taskDelay、taskSuspend、semTake等。
②使更高优先级任务就绪而发生优先级抢占如,通过semGive释放信号量,导致更高优先级的任务就绪。
③降低自身优先级或者退出如,任务可通过taskPrioritySet改变自身优先级;通过exit终止自身执行等。
2) 异步任务切换通常由中断服务使高优先级任务就绪引起(如)由上面的描述可知,中断是导致任务可能发生调度的一种情况,而且一般被归为异步任务切换。
而除了同步任务切换和异步任务切换之外,可能还有提及到抢占调度和非抢占调度,进而又联系到中断。
问题(2)何为抢占调度?抢占调度是否就指中断引发的调度?个人认为,VxWorks的抢占调度就是指,由于有高优先级的任务处于就绪状态,而导致系统需要进行任务切换。
另外,我们知道VxWorks系统(wind内核)采用的调度策略为:默认采用基于优先级的抢占式调度;同时,还使用轮转调度。
从这点也能说明,所谓抢占式调度主要是基于任务优先级而言的,而不是针对中断(或者异步任务切换)。
如果非要额外再给抢占式调度下个定义或者归类的话(虽然个人觉得没必要,理解即可),应该包括:1)异步任务切换(中断引发)2)同步任务切换中的第②类,即由于当前运行任务的某种操作,使更高优先级任务就绪而发生优先级抢占除了上述两种情况之外的其他任务切换,都可以认为是当前运行的任务主动放弃CPU使用权,而非被抢占。
vxworks中断处理[精彩]
Vxworks作为一个实时嵌入式操作系统,通常采用中断的方式来满足系统实时性的要求,因此,熟悉其中断的处理过程对于VxWorks操作系统的开发是至关重要的.本文通过编写和调试基于A T91RM9200处理器的VxWorks嵌入式操作系统的BSP,来讨论VxWorks操作系统的中断机制。
1 VxWorks中断处理机制及AICAT91RM9200使用一个8优先级,可单独屏蔽中断的中断向量控制器AIC。
在ARM体系结构中,有7种异常中断,对应有一个异常中断向量表。
ARM体系结构要求这个异常中断向量表从0地址处开始,对于外部中断请求IRQ,系统又增加了一块由中断控制器控制的中断向量表。
2 AT91RM9200 BSP的中断驱动的实现2.1 中断驱动中定义的函数STATUS at91rm9200LvlVecChk (int*,int*);STATUS at91rm9200LvlVecAck(int,int);STATUS at91rm9200LvlEnable(int);STATUS at91rm9200LvlDisable(int);2.2 高级中断控制器AIC的初始化在usrInit()中excVecInit()函数对异常中断向量进行初始化.整个中断库,以及中断控制器的初始化都是在syslib.c中的sysHwInit2()函数中完成的.该函数在sysClkConnect()中被调用,因为系统时钟中断要在内核开放中断后就要使能,因此内核在初始化为一个多任务环境后,就产生一个usrRoot()的任务,在该任务中要建立系统时钟中断,因此调用了sysClkConnect()函数,中断库以及中断控制器的初始化也就完成了。
高级中断控制器必须进行初始化,其初始化是在板级支持包BSP的中断驱动程序中。
具体的实现函数是void at91rm9200IntDevInit(void)。
该函数在文件syslib.c的sysHwInit2()函数中调用。
基于VxWorks的多中断处理设计
2 传统多中断处理存在的问题
由于用函数 intConnect()调用的用户中断处理函数在中
断级以 supervisor 方式调用,因此为了保证 VxWorks 的实时
性,应该尽可能在最短的时间内完成操作,以免影响实时系
统对高频突发事件的响应。另外,VxWorks 的 ISR 必须遵循
一个基本约定:不能调用可能引起阻塞的函数和 I/O 操作函
系统的强实时性和可靠性。针对这个问题,下面介绍一种应
用实时操作系统 VxWorks 进行多中断处理的方法。
3.1 多中断处理的程序设计框架 为了能尽快响应中断,VxWorks 中的中断服务程序不在
固定的任务上下文中执行,而且没有任务控制块,所有中断
程序必须共享一个单独的堆栈,这导致许多 VxWorks 函数在
断驱动代码中不保存和恢复浮点寄存器。另外,在多中断系
统中,如果一些中断处理函数长时间占用中断号,容易出现
系统中断号资源不够用的情况,可能导致中断请求超时而引
起系统出现不可预测的后果,不能保证 VxWorks 的可靠性。
3 基于 VxWorks 的多采集板系统中断处理设计
在多采集板的大型系统中,通常采用工业机箱为多块板
路如图 3 所示。CK5 使用 CPLD 寄存器获取外部(cPCI 和 PMC)
—250—
中断和板内中断。当其中一个中断被声明后,CPLD 就向 MV64460 的多目的管脚(MPP)声明一个中断。MV64460 获得 中断请求后就在中断控制器中设置引起中断的寄存器的管 脚。这样,中断控制器就向处理器 MCP7447A 声明了中断 CPU_INT0[4]。
数。如 ISR 不能调用 semTake()来获取一个信号量,因为在此
VxWorks中的中断应用设计要点
VxWorks中的中断应⽤设计要点硬件中断处理是实时系统设计中的关键性问题,设计⼈员有必要对其作深⼊研究,以更好地满⾜开发⼯作需要。
⽂中以VxWorks操作系统为软件平台,讨论了在实时系统中进⾏中断应⽤设计时要注意的⼀些问题。
由于软硬件的相关性,选⽤⼴泛应⽤的X86架构的嵌⼊式汁算机为硬件平台,对PenriumCPU和计算机主板对硬件中断的管理机制也做了详细介绍所得出的研究结论在具体的开发项⽬中均得以验证,可供相关技术⼈员参考。
硬件中断处理是实时系统设计中最重要、最关键的问题。
⽂中综合软硬件,从⼯程应⽤的⾓度对此问题加以讨论。
⽂中所述内容针对的软件平台是VxWorks实时操作系统,硬件平台选⽤⼴泛使⽤的X86架构的嵌⼊式计算机,全⽂按照CPU、主板、操作系统⾃下⽽上的顺序展开。
1 Pentium CPU的中断类型有两类事件可引起Pentium挂起当前的指令流,即中断和异常。
中断是由外部事件引发的,在程序执⾏的任何时刻都可能出现;异常也称异常中断,是由内部事件引发的。
中断和异常各有两类触发源:(1)中断。
可屏蔽中断:CPU的INTR引脚收到有效信号,如果Pentium标志寄存器IF位为1,则允许中断,否则信号在CPU内被屏蔽。
⾮屏蔽中断:CPU的NMI引脚收到有效信号⽽引发的中断,这类中断不能被阻⽌。
(2)异常。
执⾏异常:CPU试图执⾏⼀条指令的过程中出现错误、故障等不正常条件⽽引发的异常中断。
执⾏软件中断指令:Pentium指令系统中包括⼀些如INTO,INT n这类软件中断指令,执⾏时产⽣异常中断。
详细分类的话,Pentium可以识别256种中断和异常。
每种中断给予⼀个编号,即0~255,称为中断向量号(interrupt vector number)。
其中NMI、异常以及系统保留占⽤中断向量号0~31,⽽32~255为⽤户中断向量号,可供INTR和⾃定义软件中断(如汇编中的INT指令)使⽤。
vxworks操作系统中中断的应用
VxW orks操作系统中中断的应用Ξ籍林峰,曹 伟ΞΞ(南京船舶雷达研究所,江苏南京,210003)摘 要:主要介绍了VxW orks操作系统中中断的重要性以及具体应用,其中涉及了信号量的概念并对其进行了简单描述。
关键词:嵌入式实时操作系统;中断服务程序;信号量中图分类号:TP3 文献标识码:A 文章编号:100920401(2004)0320067203Application of interruption in the operating system of VxW orksJI Lin2feng,C AO Wei(Nanjing Marine Radar Institute,Nanjing210003,China)Abstract:The im portance and concrete application of interruption in the operating system of VxW orks is in2 troduced in this paper,in which the concept of the semaphore is inv olved and is sim ply described.K ey w ords:embedded real2time operating system;interruption of service program;semaphore1 引 言对系统的响应时间有严格要求的系统,我们通常称之为实时系统。
近半个世纪以来,随着计算机技术的发展,实时系统在各高精尖技术领域得到迅猛发展,具有实时操作系统的计算机系统在实时系统中也得到了广泛的应用。
实时操作系统是嵌入式应用软件的基础和开发平台,它不同于分时操作系统,它的主要任务是对事件进行实时的处理。
虽然时间可能在无法预知的时刻到达,但是软件必须在事件发生时在严格的时限内作出响应。
VxW orks就是一个由Wind River Sys2 tem公司推出的嵌入式实时操作系统,具有多任务、可裁减、可靠性好、实时性高等特点,其在航天领域的出色表现而使之备受广大电子行业的青睐。
VxWorks信号中断和定时
wdStart()可以在超时时运行看门狗程序,要想周期性执行 (zhíxíng),看门狗程序必须调用wdStart()自己重新启动
共二十二页
使用(shǐyòng)看门狗定时器
使用看门狗定时器可以使一段程序周期性地执行
wdId= wdCreate();
– wdStart( wdId, DELAY_PERIOD, myWdIsr, 0); – void myWdIsr(param) – {doit(param);
调试 中断 (diào shì)
中断处理程序可以调用logMsg()向系统输出(shūchū) 诊断信息
– logMsg(“foo= %d\n”,foo,2,3,4,5,6) – 向tLogTask发送请求为我们实现printf()的功能
和printf()相似,但必须注意 –参数必须为4字节 –函数有6个入口参数 使用具有系统级调试的机制进行调试 –WDB Agent –emulator
{
routineRestore …
registerRET
}
共二十二页
设置(shèzhì)中断处理程序
VxWorks提供函数intConnect(), 它允许(yǔnxǔ)将指定的C函数与 任意中断相联系
STATUS intConnect()
{
VOIDFUNCPTR *vector;/*要联系的中断向量*/ VOIDFUNCPTR *routine; /*中断发生时要调用的函数*/ intparameter;/*传递给中断处理函数的参数*/
共二十二页
中断(zhōngduàn)和优先级
共二十二页
ISR的使用(shǐyòng)限制
VxWorks中的中断应用设计要点
VxWorks中的中断应用设计要点
耿锐;王闵
【期刊名称】《计算机技术与发展》
【年(卷),期】2005(015)005
【摘要】硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要.文中以VxWorks操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题.由于软硬件的相关性,选用广泛应用的X86架构的嵌入式计算机为硬件平台,对PentiumCPU和计算机主板对硬件中断的管理机制也做了详细介绍.所得出的研究结论在具体的开发项目中均得以验证,可供相关技术人员参考.
【总页数】4页(P122-124,127)
【作者】耿锐;王闵
【作者单位】西安电子科技大学,计算机学院,陕西,西安,710071;西安电子科技大学,计算机学院,陕西,西安,710071
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于 T1040的 VxWorks中断亲和力研究 [J], 李世锐;温永强;高海峰;齐亚磊
2.VxWorks实时操作系统中的中断处理机制分析 [J], 王运盛;王坚
3.VxWorks操作系统中中断的应用 [J], 籍林峰;曹伟
4.VxWorks下MPC860的中断处理机制及其应用 [J], 王明飞; 张效义; 李鸥; 邢明
5.VxWorks下龙芯3A中断控制技术的研究 [J], 徐骞
因版权原因,仅展示原文概要,查看原文内容请购买。
23 VxWorks中断驱动实验
函数名称:intConnect ( )
函数说明:设置指定中断的服务函数。
STATUS intConnect
(
VOIDFUNCPTR * vector, /* 中断向量 */
VOIDFUNCPTR routine, /* 中断服务函数 */
iБайду номын сангаасt
parameter /* 参数 */
)
函数名称:sysGpioIntConnect ( )
#include "cacheLib.h"
#include "lstLib.h"
/* Needed to maintain protocol list. */
#include "iv.h"
#include "stdlib.h" #include "sysLib.h" #include "intLib.h" #include "taskLib.h"
(
FUNCPTR * vector,
/* 中断向量的偏移*/
FUNCPTR function
/* 向量中的地址 */
)
函数名称:intVecGet ( )
函数说明:获取中断向量。
FUNCPTR intVecGet
(
FUNCPTR * vector
/* 中断向量的偏移 */
)
所有的中断服务函数都会使用同一个堆栈,这个堆栈是在系统启动时建立的,所以中断
五 实验报告书编写要点
1. 编写 interrupt 工程,并编写相应的程序实现对外部中断 2 的响应; 2. 下载 VxWorks 内核; 3. 启动目标服务器; 4. 下载并运行 interrupt 工程; 5. 观察结果。
vxworksprintf与logMsg及中断相关内容(转载加总结)
vxworksprintf与logMsg及中断相关内容(转载加总结)1. printf需要调用输入/输出设备资源,若在intr中使用printf,可能会由于标准输入/输出设备在被使用中(一般会semtake一下),这导致intr被阻塞,这在vxworks在是不被允许的,可能就导致系统响应速度极其慢或者忽快忽慢(因为通常情况下intr的第一步操作是自私的关闭所有中断,此时资源等到in/out设备可以使用才会继续往下执行)。
logMsg里面的实现是将消息发送给sysLog这个任务,查看一下vxworks发现,这个任务的优先级为0(不知道是不是我们的比较特别)。
这带来一个规则:若在intr中,sysLog不会进行抢占操作将logMsg中的信息输出出来(毕竟interrupt的优先级是最高的),但是intr一执行完,它立刻抢占,将信息输出。
若在普通的任务(优先级 > 0)中调用logMsg,它会毫不留情的抢占,将信息输出。
2. 相关解释printf( ) - write a formatted string to the standard output stream (ANSI).logMsg( ) does not actually perform the output directly to the logging streams, but instead queues the message to the logging task, logMsg( ) can be called from interrupt service routines.printf()是将信息输出到标准输出设备(STDIN/STDOUT)中,如果此时设备正在工作,那么就会发生阻塞.logMsg()是使用消息队列的方式,它将信息地址发送到队列,由专门的任务将信息打印出来.关于LogMsg的工作机理。
LogMsg利用消息队列将用户所发的消息传送给LogTask,然后由LogTask将其显示在屏幕或者其他输出设备上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期:2004-08-02作者简介:耿 锐(1975—),男,安徽淮南人,硕士研究生,研究方向为嵌入式系统应用。
VxWorks 中的中断应用设计要点耿 锐,王 闵(西安电子科技大学计算机学院,陕西西安710071)摘 要:硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要。
文中以VxWorks 操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题。
由于软硬件的相关性,选用广泛应用的X86架构的嵌入式计算机为硬件平台,对Pentium CPU 和计算机主板对硬件中断的管理机制也做了详细介绍。
所得出的研究结论在具体的开发项目中均得以验证,可供相关技术人员参考。
关键词:实时操作系统;VxWorks ;中断中图分类号:TP311 文献标识码:A 文章编号:1005-3751(2005)05-0122-03Main Points on Interrupt Application Design in VxWorksGEN 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 ;interrupt0 前 言硬件中断处理是实时系统设计中最重要、最关键的问题。
文中综合软硬件,从工程应用的角度对此问题加以讨论。
文中所述内容针对的软件平台是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的程序片断如下:#defineIRQNum 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 中的中断应用设计要点中断号,只需从PCI配置头中读取分配到的中断号使用即可[3]。
②VxWorks中使用intConnect挂接中断服务程序,但对于PCI设备,一般采用pciIntConnect挂接中断,它与intConnect的主要不同在于intConnect使用的中断向量是独占的,而pciIntConnect则可使多个外部中断共享一个中断向量。
它在内部使用一个链表管理多个ISR,发生中断时,链接在一个链表上的各个ISR被依次调用, pciIntConnect要求每个ISR被调用时,应该首先查询是否为自己的设备产生的中断,不是则应立即返回,以继续调用其它ISR[4]。
③在VxWorks中要注意区分以下4个与中断相关的概念:IRQNumber,INumber,IVector,ILevel。
IRQNumber:外部中断信号由两片8259级联构成的PIC的那个输入管脚引入,主8259的8条中断输入线对应IRQ0~IRQ7,从8259对应IRQ8~IRQ15。
INumber:Pentium CPU的中断向量号。
INumber= IRQNumber+IN T-NUM-IRQ0,IN T-NUM-IRQ0,即IRQ0对应的中断向量号,BSP的config.h中定义其为0x20(十进制的32),即Pentium CPU中断向量号用户定义区的起始编号。
IVector:中断向量,是指某中断的中断描述符在中断描述符表中的偏移量。
INumber与IVector间的关系可简单描述为:IVector=INumber38。
可以用ivI86.h中定义的两个宏(INUM-TO-IVEC,IVEC-TO-INUM)实施转换。
ILevel:中断优先级。
由于主从8259都被初始化为固定优先级,优先级逐渐递减,且两片8259存在级联关系,所以优先级关系为IRQ0>IRQ1>IRQ2[IRQ8>IRQ9 >…>IRQ15]>IRQ3>…>IRQ6>IRQ7。
表1列出了IRQ0~IRQ15对应的中断向量号(INumber)与中断向量(IVector)。
表1 中断相关概念对照表IRQNumber INumber IVector0320x1001330x1082340x110………15470x178 ④用intConnect挂中断后,还必须用sysInt EnablePIC 使能中断,sysInt EnablePIC的函数原型在i8259Pic.c中定义,实际上就是针对某个IRQ,置8259中断屏蔽寄存器中的相应位为允许。