基于VxWorks操作系统的通用定时器设计
摘要 VxWorks操作系统以其强实时性、可剪裁性等特点得到了广泛应用,但其并未提供通用的定时器模块。为解决某机载发射装置控制盒中VxWorks系统的精确定时问题,文中在分析多种定时方式的基础上,利用辅助时钟中断,通过创建定时节点,构造节点链表,设计了基于辅助时钟的通用定时器模块。经测试表明,该模块实现了毫秒级定时,满足了某发射装置的定时需求,并为今后类似系统的精确定时需求提供了方便。
当前,无人机技术发展迅猛。为满足我国察打一体无人机的装备需求,基于现有小型制导武器和无人机平台进行集成,填补该领域空白。在某型空地制导武器和某型无人机的集成中,由于二者具有不同的数字通讯方式和电气接口等,需在机载发射装置中加装控制盒,以满足飞机与武器的交联需求。该控制盒采用VxWorks操作系统设计软件,具有实时性强、稳定性高等特点。
VxWorks操作系统自1987年由美国风河公司成功推出以来,已被广泛应用于通信、军事、航空、航天等高精尖及实时性要求较高领域。
1 VxWorks几种常用的定时方式
在实时性要求高的应用系统中,定时器经常会被用到。VxWorks提供了多样的定时器接口函数,但没有通用定时器。在VxWorks提供的定时器接口函数中,taskDelay()、WatchDog和sleep/nanosleep都以tick为基准,定时误差较大,无法满足高精度的定时要求,若把系统cloc krate(默认为60)提高,系统会被频繁的时钟中断打断,效率降低。另外,时间戳sysTimeStamp()虽可实现高精度定时,但该定时方式较占用系统资源,只适合短时间定时。
辅助时钟是利用目标板CPU内除系统时钟外的另一个定时器中断实现,VxWorks提供了一系列与系统时钟相同的操作接口,可以通过挂接用户自己中断服务程序的方式实现精确延时,当辅助时钟的定时周期到时,即触发中断服务程序。本文针对多任务长时间工作的高精度定时需求提出了基于辅助时钟的通用定时器机制。
2 基于辅助时钟的定时机制设计
2.1 辅助时钟的使用
在VxWorks下要利用辅助时钟,首先要对辅助时钟的使用进行配置,以确保辅助时钟可以被正常使用,然后分别调sysAuxClkConnect()函数将中断服务程序与辅助时钟中断挂接、sysAuxClkRate()函数设置辅助时钟中断周期、sysAuxClkEnable()/sysAuxClkDisable()函数允许和禁止辅助时钟。
通过对辅助时钟的使用方式进行研究发现,如果能在与辅助时钟中断挂接的中断服务程序中对定时节点的剩余时间进行更新,当节点剩余时间变为0则说明该节点定时时间到,此时进行相应的操作,从而达到精确定时的目的。可通过同步信号量来调用定时节点处理任务来处理已经定时到的节点。以下是辅助时钟使用的基本原理
由此可看出,通过中断服务程序,将辅助时钟与定时任务联系起来,为精确定时提供了可能。
2.2 定时节点链表的创建
根据上述特点,可将所有的定时任务通过一个定时任务链表与基于辅助时钟设置的定时器关联起来,每当程序应用层添加一个定时任务,就往该定时任务链表添加一个定时任务节点。通常的添加方法是,插入时从链表头节点开始遍历,根据各个节点的剩余时间来确定插入位置,即将所要插入的定时任务节点按照相对其前一节点剩余时间的差由小到大排列。这样,当辅助时钟中断到来时只需对定时任务链表中的第一个节点剩余时间进行修改即可,而不必对整个链表进行遍历,从而减小了对实时性的影响。
假设系统中存在A、B、C三个定时任务,分别提交了定时周期为20 ms、40 ms和25 ms的定时任务,任务间提交的时间间隔为2 ms,则定时任务链表节点的插入和排列情况如图1所示。其中,第一步插入后,链表中为A任务的20 ms定时节点;第二步插入为第一步操作2 ms后,此时链表中A节点的剩余时间变为18 ms,而新插入B任务的定时周期为4 0ms,大于A节点剩余时间,故插入链表后B任务剩余时间变为22 ms;同理,2 ms后第三步新插入C任务的25 ms定时节点剩余时间变为9 ms,B任务剩余时间变为13 ms。
2.3 定时器实现
定时任务链表中的每个节点都对应一个定时任务,其结构如下
通用定时器的实现主要提供了以下4个函数接口供应用层使用,以及一个系统中断程序和一个自动加载并启动的任务。
未找到引用源。定时模块初始化函数ComTimerInit(int precision)定时模块初始化函数主要用来初始化定时节点链表、创建信号量、设置辅助时钟、创建定时中断处理任务,其中参数precision为定时器的分辨率,最小为1 ms。
定时节点添加函数int TimerIncrease(int val,void*pFunc,void*arg,SEM_ID sem)主要用于设置
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- 军事指挥系统中VxWorks下汉字显示技术(07-16)
- 基于VxWorks的文件系统的研究与实现(09-18)
- 嵌入式语音通信系统中VxWorks BSP的设计实现(09-18)
- 嵌入式系统的VxWorks安全性问题研究(11-06)
- VxWorks下的多重定时器设计(02-16)