您当前的位置:首页>论文资料>VxWorks下几种任务设计模型的分析与实现

VxWorks下几种任务设计模型的分析与实现

资料类别:论文资料

文档格式:PDF电子版

文件大小:515.55 KB

资料语言:中文

更新时间:2024-11-21 09:53:32



推荐标签:

内容简介

VxWorks下几种任务设计模型的分析与实现 a 与变用
设计开发
VxWorks下几种任务设计模型的分析与实现
孙健
(华东电子工程研究所安徽合肥230031)
摘要:VxWorks是专门为实时丧入式系统设计开发的操作系统软件,为程序提供了高效的实时任务调度、中断管理、实时的系统资源以及实时的任务间通信。鉴于VxWorks操作系统的高可靠性、高实时性等使得其在国防电于工业中占据了重要的住置。本文根据任务的功能特点,给出了三种任务模型,结合VxWorks的任务管理及通信机制等,对各模型进行分析,并提出实现方法。
关键词:VxWorks多任务信号量中断服务程序
中图分类号:TP393 1VxWorks多任务
文献标识码:A
任务是代码运行的一个映像,从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或者等待CPU、I/O设备及内存空间等系统资源,并独立于其他的任务,与它们一起并发运行。 VxWorks的实时内核会根据任务的优先级和资源的占有等情况决定各个任务的状态迁移,如图1所示:
任务创建时,必须注意释放资源,不能一直占用CPU资源,需暂时放弃CPU资源,否则会使低优先级任务无法执行。例如,在任务的函数主体部分执行semTake0/msgQReceive(),可以使任务暂时放弃CPU资源,以供其它任务调用CPU资源。
在较为复杂的软件系统中,任务的设计和划分,需要考虑到任务的功能内聚性、时间紧迫性和周期执行的原则,使得任务的功能耦合比较紧密,事件能够得到及时响应,周期性执行的工作能以一个任务运行。
2任务间通信机制
在多任务系统中,为了协调任务间的活动,我们需要使用任务间通信机制.VxWorks中,常见的通信机制主要有以下几点,共享内存机制、消息队列机制、管道机制、信号量机制。
此外,还有Socket,远程调用(RPC),Signal等。在复杂系统设计与实现中,需要根据任务的功能特点以及通信机制特点,灵活选用多种通信机制,已实现各种任务模型。下文将对三种任务模型进行
分析,并给出实现方法。 3周期性任务
周期性任务,主要应用于周期性功能需求中,例如某型雷达监控系统中,需要周期性采集并解析各模块的状态信息等。周期性任务的实现,需要建立在时钟基础之上。VxWorks提供了较为精确的
任务得究所需劳源,但优先据赶手5前止在执疗的务
任务商委号特艾神费
任务得究所据资证,且优先级高于当前正在执行的任务
Pend
Delay
Running
集康代装
优光点更
CPU
务n PU
并务通
征务被
低务被按
安货等特基种营
Ready
在执丹的红务
在务 a
任务通出社意
Suspend 征务核电最的就
图1任务基本状态转移图
收稿日期:2015-04-13
状志,回优先最班于当能在美行的任务
文章编号:1007-9416(2015)04-0137-01
系统时钟周期tick,其时长默认为1/60秒,也可按用户需求自定义tick,再通过tick的累加以达到用户需要的周期。在每一周期内释放一次二进制信号量,以驱动一次周期性任务执行.例如,以10ms为周期的任务,其实现方法如下;
3.1创建二进制信号量
二进制信号量值为0或1,同时只能被一个线程获取,用于任务互斥和同步。
3.2设置tick及系统时钟ISR
(1)sysCIkConnect ((FUNCPTR) vClockProcess, 0);
sysClkConnect()完成系统时钟ISR的连接,经过一个固定的时间间隔,硬件定时器发送时钟中断信号,通知VxWorks内核开始执行 vClockProcess0)。vClockProcess()为时钟中断响应函数,函数体内需要调用tickAnnounce(),以通知内核一个tick事件,并使用sem_post(m_sem),使得每个定时周期10ms内,释放一次信号量供周期性任务获取。
(2)sysClkRateSet(100):sysClkRateSet(100)表示tick时长为 1/100秒,即10毫秒。
3.3创建任务
首先,使用taskSpawn创建(产生并激活)新任务,调用运行成功返回任务ID号,否则为ERROR。然后,使用sem_wait(&m_sem),使得任务每10ms获取到一次信号量,从而达到10ms周期性执行一次任务。
4中断响应任务
以响应串口中断的任务为例,实现方法如下:(1)初始化串口:
(2)挂接中断服务程序
intConnect()为设备挂接中断服务程序IRQ4Process(), INUM_TO_IvEc(intNum)将一个中断号转换成中断向量。中断服务程序IRQ4Process()应尽量简短,程序运行要尽快结束,不能调用 printf()、malloc()和semTake()等会引起阻塞的函数,可以调用 logMsg()打印信息,调用semGive()发送信号量通知任务执行。
(3)设计任务。任务主体部分,使用semTake(semSomelSR, WAIT_FOREVER)获取信号量,然后编写任务主体操作部分。 5结语
本文设计实现的三种VxWorks任务模型,是嵌入式系统设计中较为常见且重要的任务模型,运用到的技术包括信号量、消息队列,中断机制以及内存共享等。具体的运用中,需要根据具体需求,划分具有不同功能特点的任务模型,并灵活运用任务通信机制加以实现。
参考文献
[1]邝坚.Tornado/Vxworks入门与提高[M].北京:科学出版社,2004 3133
[2]王金刚,宫霄露,杨锡励,等.基于Vxworks的嵌入式实时系统设计[M].清华大学出版社.2004
作者简介:孙健(1985一).男,安微蚌埠人,硕士,助理工程师,研究方向:软件自动化。
137
万方数据
上一章:PHP中多态的实现 下一章:ZJCORS 省级服务系统的建设思路与实现

相关文章

VxWorks环境下socket的实现 基于VxWorks操作系统的触摸屏驱动实现 基于价值模型的全面预算系统的设计与实现 VxWorks系统的管理与维护技术分析 基于单片机的飞机航向控制显示教学模型设计与实现 基于近红外的多相偏最小二乘模型组合分析实现茶叶原料品种鉴定与溯源的研究 VxWorks环境下底层双冗余以太网卡关键技术实现 冲压工艺分析与模具设计方法:任务驱动式教程