vxworks中断服务程序
- 格式:pdf
- 大小:201.38 KB
- 文档页数:3
1. VxWorks 任务任务:在执行时每个程序都被称之为任务。
VxWorks操作系统中,任务可以直接地或者以共享方式访问大多数系统资源,为了维护各自的线程,每个任务必须保持有足够的上下文环境。
(1) 任务状态:就绪(READY):该状态时任务仅等待CPU的状态,不等待其他任何资源。
阻塞(PEND):任务由于一些资源不可用而被阻塞时的状态。
睡眠(DELAY):出于睡眠的任务状态。
挂起(SUSPEND):该状态时任务不执行,主要用于调试用。
挂起仅仅约束任务的执行,并不约束状态的转换,因此pended-suspended状态时任务可以解锁,delayed-suspended状态时任务可以唤醒。
DELAY+S:既处于睡眠又处于挂起的任务状态。
PEND+S:既处于阻塞又处于挂起的任务状态。
PEND+T:带有超时值处于阻塞的任务状态。
PEND+S+T:带有超时值处于阻塞,同时又处于挂起的任务状态。
state+I:任务处于state且带有一个继承优先级。
------------------------------------------------------------------------| ready | ——> | pended | semTake () / msgQReceive () || ready | ——> | delayed | taskDelay () || ready | ——> | suspended | taskSuspend () || pended | ——> | ready | semGive () / msgQSend () || pended | ——> | suspended | taskSuspend () || delayed | ——> | ready | expired delay || delayed | ——> | suspended | taskSuspend () || suspended | ——> | ready | taskResume () / taskActivate () || suspended | ——> | pended | taskResume () || suspended | ——> | delayed | taskResume() |------------------------------------------------------------------------(2) Wind任务调度在Wind内核中,默认算法是基于优先级的抢占式调度算法,也可以使用轮转调度算法。
VxWork介绍及编程VxWork介绍及编程一.嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
实时操作系统和分时操作系统的区别从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。
分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。
这样的系统无法实时响应外部异步事件。
实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。
分时系统主要应用于科学计算和一般实时性要求不高的场合。
实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。
VxWorks的特点•可靠性操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。
而稳定、可靠一直是VxWorks的一个突出优点。
自从对中国的销售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。
•实时性实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。
实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。
VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。
vxWorks多任务编程初探(转)进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。
而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。
它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
根据进程与线程的设置,操作系统大致分为如下类型:1、单进程、单线程:MS-DOS大致是这种操作系统;2、多进程、单线程:多数UNIX(及类Unix的Linux)是这种操作系统;3、多进程、多线程:Windows NT(以及基于NT内核的Windows 2000、XP等)、Solaris 2.x和OS/2都是这种操作系统;4、单进程、多线程:vxWorks就是这种操作系统。
vxWorks只有一个进程(内存空间和资源分配),其任务的概念与线程大致相当,所有任务之间共享内存和其它资源。
vxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。
vxWorks 内核最小为8KB,即便加上其它必要模块,所占用的空间也很小,且不失其实时、多任务的系统特征。
vxWorks的内核主要包括:1、多任务:为满足真实世界事件的异步性,现代操作系统需提供多任务支持,由系统内核分配CPU给多个任务并发执行。
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操作系统是运行在目标机上的高性能、可裁剪的嵌入式实时多任务操作系统,其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天、航海等高精尖技术及实时性要求极高的领域中。
在实际的工程应用中,周期任务,需要有最大的延迟或称为等待时间。
这类任务一般会为BIT检测任务,链路检测任务,点迹查询任务等。
这段等待时间,在VxWorks操作系统中,可以通过多种延时方法实现。
1 taskDelay法原理taskDelay是最简单的延时方法。
延时操作提供了一个简单的任务休眠机制。
当一个任务调用taskDelay后,它将主动放弃CPU一段时间,进入Delay状态。
超时后,这个任务会排到Ready队列中同优先级队列的队尾等待执行。
它的单位是tick,tick是VxWorks下的时钟中断频率,可以通过sysClkRateSet设置,一般在60-100之间。
在体系架构、CPU 频率等硬件条件允许的范围内,这个值可以随意设置。
不过,设置的时候要根据实际需要,而不是每个时间片的间隔越短越好。
时间片的数量影响着内核每秒钟调度的次数,而每次内核调度都需要消耗一定的CPU资源。
如果每秒产生的时间片数量过大,内核调度所消耗的CPU资源就会过多,从而影响整机效率。
在实际工程中,一般选取每秒tick数为100。
可以通过调用taskDelay,将CPU交给同等优先级的任务。
由于联盟其延时的基本单位为tick,因此,最小延时单位为10ms,延时精度不高。
一般来说,当该任务通过taskDelay进入睡眠状态时,若这段时间内被高优先级的任务占有资源时,则一直得等高优先级的任务放弃资源时,这个任务才会获得资源。
因此,taskDelay延时很方便,却需要有一定的风险。
实际的延时时间为预设延时时间与排队等候时间之和,这样将会导致延时不准确,也对任务的调度安排提出了一个挑战。
这样看来,时间片延时并不是很准确,其准确程度需要根据任务调度的状况来决定。
Vxworks常用命令版本及修订说明:目录VXWORKS常用命令 (1)说明 (2)常用命令 (2)说明常用指令使用两种方式:1、在串口超级终端下输入命令;串口设置为115200,8N1;2、使用telnet登陆装置,然后在shell下输入命令;用户:密码:常用命令命令:version查看vxworks程序时间:命令:ll查看文件列表。
U21平台的主CPU文件系统包括:/shr 、/set、/log、/wave。
命令:cdcd “目录名”命令:rm删除文件“文件路径和文件名称”或者remove “文件路径和文件名称”命令: i查看任务状态。
正常任务状态为:PEND/READY。
异常为:STOP、SUPPEND. 状态中出现+I说明该任务占用了高优先级任务所需要的资源,而被暂时提高了优先级运行。
命令:tt “任务名称”查看任务调用情况。
当系统中出现异常任务时,只要使用命令:tt,可以查看异常任务函数调用情况。
命令:ti “任务名称”查看任务详细信息.命令:checkStack 查看各任务堆栈使用情况。
命令:getcpuusage 查看任务负载。
命令:devs查看驱动设备列表。
命令:iosFdShow查看被打开的文件id列表:命令:systime查看修改装置时间命令;systime “Time=xx:xx:xx”修改时间;systime “TIME=XX-XX-XX”修改日期其中:status为0为没有检查到外部对时。
status为1为对时源为1588对时;2为B码;4为PPS;但与定值配置不符。
status=800x:表示外部对时正常;x为1为1588对时;2为B码;4为PPS 命令:ifShow查看网口IP地址。
命令:ifAddrSet修改装置网卡IP地址:格式:ifAddrSet "qefcc0","198.120.0.107"其中:qefcc0为第一个网口(板卡面板从上往下数),qefcc1为第二个网口,qefcc2为第三个网口。
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;。