Vxworks中断服务程序解析
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下基于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
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任务调度与中断学步园

VxWorks任务调度与中断学步园最近在看有关任务调度和中断的文章,主要的话题或者讨论点可以归为如下几个递进的问题:(1)引发任务调度的情况、原因(2)何为抢占调度?抢占调度是否就指中断引发的调度?(3)关中断是否禁止任务调度?针对上述问题,本文简单说一下个人的理解,有不妥之处还请大家多指点。
下面就以VxWorks操作系统为例,讨论任务调度和中断的关系。
问题(1)引发任务调度的情况、原因首先,看一下VxWorks任务调度时机的两种情况:1) 同步任务切换引起的原因是当前运行的任务可能执行了如下下列操作:①进行阻塞、延迟、挂起的调用如,调用 taskDelay、taskSuspend、semTake等。
②使更高优先级任务就绪而发生优先级抢占如,通过semGive释放信号量,导致更高优先级的任务就绪。
③降低自身优先级或者退出如,任务可通过taskPrioritySet改变自身优先级;通过exit终止自身执行等。
2) 异步任务切换通常由中断服务使高优先级任务就绪引起(如)由上面的描述可知,中断是导致任务可能发生调度的一种情况,而且一般被归为异步任务切换。
而除了同步任务切换和异步任务切换之外,可能还有提及到抢占调度和非抢占调度,进而又联系到中断。
问题(2)何为抢占调度?抢占调度是否就指中断引发的调度?个人认为,VxWorks的抢占调度就是指,由于有高优先级的任务处于就绪状态,而导致系统需要进行任务切换。
另外,我们知道VxWorks系统(wind内核)采用的调度策略为:默认采用基于优先级的抢占式调度;同时,还使用轮转调度。
从这点也能说明,所谓抢占式调度主要是基于任务优先级而言的,而不是针对中断(或者异步任务切换)。
如果非要额外再给抢占式调度下个定义或者归类的话(虽然个人觉得没必要,理解即可),应该包括:1)异步任务切换(中断引发)2)同步任务切换中的第②类,即由于当前运行任务的某种操作,使更高优先级任务就绪而发生优先级抢占除了上述两种情况之外的其他任务切换,都可以认为是当前运行的任务主动放弃CPU使用权,而非被抢占。
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将其显示在屏幕或者其他输出设备上。
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], 徐骞
因版权原因,仅展示原文概要,查看原文内容请购买。
第4.3节 VxWorks信号中断和定时
18
VxWorks中断处理流程
保存CPU寄存器 从中断控制器读中断向量号 顺序调用该中断服务程序 通知中断控制器中断服务程序结束 恢复CPU寄存器 返回
第4章
.
19
中断和优先级
第4章
.
20
ISR的使用限制
第4章
.
ISR执行完成之前,其它任务不能执行 ISR中不能调用某些VxWorks函数,尤其是,ISR不
信号量
ISR释放信号量,任务等待接收信号量
消息队列
ISR发送消息,任务等待接收消息,如果消息队列满,该消息被丢弃
管道
ISR向管道写消息,任务读消息
信号
ISR可以向任务发送signal。
23
调试中断
第4章
.
中断处理程序可以调用logMsg()向系统输出诊断信 息
logMsg(“foo = %d\n”,foo,2,3,4,5,6) 向tLogTask发送请求为我们实现printf()的功能
轮询硬件 检查系统错误
VxWorks提供对两种定时器的相同的接口
系统时钟 辅助时钟
26
系统时钟
第4章
.
系统时钟完成下列工作
增加ticks计数(使用tickGet()获得计数值)
更新延时和超时计数器
检查循环调度
默认的时钟频率是60Hz
sysClkRateSet()
设置时钟频率
参考sigLib (组件:INCLUDE_SIGNALS)
6
信号编号
第4章
.
31个信号编号,从1-31
#define #define #define #define
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任务编程中常见异常分析
VxWorks任务编程中常见异常分析[日期:2006-6-3] 来源:中国电子爱好者家园作者:admin [字体:大中小] 在任务运行过程中,会出现一些异常的情况,导致任务不能正常运行或者对操作系统造成影响。
一般来说,这些异常是由程序的逻辑错误造成的,防止这些异常情况的出现和出现后进行补救就有格外重要的意义。
1 代码重入与共享在应用中,可能会出现多个任务调用同一段代码的情况,由于任务占用CPU是串行的,不会出现代码资源使用冲突。
但是,不同优先级的任务同时调用同一段代码,则可能出现低优先级任务执行某一函数时被执行该函数的高优先级任务打断的情况,如果函数中要改写全局变量而没有使用互斥,就有可能导致错误的存取。
例如在中断中调用内存分配或者释放函数,如果某个任务正在调用内存分配函数或者是内存释放函数,打断该任务时会造成异常,可能导致内存泄漏,甚至有可能会因在中断中异常而reboot。
另外,如果多个任务共用的代码中有全局变量且使用目的不同,或者多个任务的代码中有全局变量同名的情况,则有可能造成变量使用中的错误。
VxWorks提供了任务变量(taskVar)的方法来解决这个问题,任务可以将使用的全局变量作为任务变量独立使用,添加的任务变量保存在任务的上下文中,任务切换时保存当前内容。
2 符号表的使用VxWorks中有模块(module)的概念。
装载模块完成目标代码文件在内存中的链接,并可以将目标代码文件中的函数与全局变量加入符号表。
符号表中的符号对C语言编写的函数以原来名字命名,对于C++语言的函数则是在后面加上形参的数据类型作为符号名。
如f1( )的符号名为f1__Fv,最后的v表示void类型; f2(int)符号名为f2__Fi,f3(int,int)为f3__Fii,依此类推。
代码的编译过程中并不对要使用的函数和变量进行检查。
例如调用一个并不存在的函数编译并不报错,编译器认为此函数可能在操作系统内核中或者已经下载的目标文件中,但在目标文件下载时会找不到要调用的函数。
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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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中不便处理的任务。