首页 > 范文大全 > 正文

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

开篇:润墨网以专业的文秘视角,为您筛选了一篇VxWorks下几种任务设计模型的分析与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:vxworks是专门为实时嵌入式系统设计开发的操作系统软件,为程序员提供了高效的实时任务调度、中断管理、实时的系统资源以及实时的任务间通信。鉴于VxWorks操作系统的高可靠性、高实时性等,使得其在国防电子工业中占据了重要的位置。本文根据任务的功能特点,给出了三种任务模型,结合VxWorks的任务管理及通信机制等,对各模型进行分析,并提出实现方法。

关键词:VxWorks 多任务 信号量 中断服务程序

中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2015)04-0137-01

1 VxWorks多任务

任务是代码运行的一个映像,从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或者等待CPU、I/O设备及内存空间等系统资源,并独立于其他的任务,与它们一起并发运行。VxWorks的实时内核会根据任务的优先级和资源的占有等情况决定各个任务的状态迁移,如图1所示:

任务创建时,必须注意释放资源,不能一直占用CPU资源,需暂时放弃CPU资源,否则会使低优先级任务无法执行。例如,在任务的函数主体部分执行semTake()/msgQReceive(),可以使任务暂时放弃CPU资源,以供其它任务调用CPU资源。

在较为复杂的软件系统中,任务的设计和划分,需要考虑到任务的功能内聚性、时间紧迫性和周期执行的原则,使得任务的功能耦合比较紧密,事件能够得到及时响应,周期性执行的工作能以一个任务运行。

2 任务间通信机制

在多任务系统中,为了协调任务间的活动,我们需要使用任务间通信机制。VxWorks中,常见的通信机制主要有以下几点:共享内存机制、消息队列机制、管道机制、信号量机制。

此外,还有Socket、远程调用(RPC)、Signal等。在复杂系统设计与实现中,需要根据任务的功能特点以及通信机制特点,灵活选用多种通信机制,已实现各种任务模型。下文将对三种任务模型进行分析,并给出实现方法。

3 周期性任务

周期性任务,主要应用于周期需求中,例如某型雷达监控系统中,需要周期性采集并解析各模块的状态信息等。周期性任务的实现,需要建立在时钟基础之上。VxWorks提供了较为精确的系统时钟周期tick,其时长默认为1 / 60秒,也可按用户需求自定义tick,再通过tick的累加以达到用户需要的周期。在每一周期内释放一次二进制信号量,以驱动一次周期性任务执行。例如,以10ms为周期的任务,其实现方法如下:

3.1 创建二进制信号量

二进制信号量值为0或1,同时只能被一个线程获取,用于任务互斥和同步。

3.2 设置tick及系统时钟ISR

(1)sysClkConnect ((FUNCPTR) vClockProcess, 0); sysClkConnect()完成系统时钟ISR的连接,经过一个固定的时间间隔,硬件定时器发送时钟中断信号,通知VxWorks内核开始执行vClockProcess()。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(semSomeISR,WAIT_FOREVER)获取信号量,然后编写任务主体操作部分。

5 结语

本文设计实现的三种VxWorks任务模型,是嵌入式系统设计中较为常见且重要的任务模型,运用到的技术包括信号量、消息队列、中断机制以及内存共享等。具体的运用中,需要根据具体需求,划分具有不同功能特点的任务模型,并灵活运用任务通信机制加以实现。

参考文献

[1]邝坚.Tornado/VxWorks入门与提高[M].北京:科学出版社,2004 31--33.

[2]王金刚,宫霄霖,杨锡劢,等.基于VxWorks的嵌入式实时系统设计[M].清华大学出版社,2004.