实时多任务火控系统软件设计

  • 格式:doc
  • 大小:82.50 KB
  • 文档页数:4

实时多任务火控系统软件设计
作者:韦金生陈明哲漆先虎
来源:《中国科技纵横》2014年第18期
【摘要】本文介绍了某火控系统实时多任务软件的设计方法。

基于火控系统功能需求,重点分析了设计过程中任务划分、任务接口及通信、任务模块、调度机制等几个关键环节。

并用C语言实现了该设计,结果表明,此方法在实时多任务软件设计中是可行的和有效的。

【关键词】实时多任务 VxWorks 任务调度火控系统
某防空火控系统中心计算机采用VxWorks 操作系统,硬件平台基于德国控创ETX-PM 1.6GHz、1G SDRAM内存、一块CF存储卡。

在本设计应用中,火控系统通过以太网接收各分系统设备信息,并发送控制命令给各被控设备,实时输出目标现在点诸元给火控计算机,用于打击目标。

由于此计算机涉及外部接口设备较多,任务调度复杂,本文对在火控系统软件设计中遇到的问题进行了研究,经理论分析与实际验证,使系统软件功能满足要求,各任务合理调度,运行稳定可靠。

1 软件平台
火控系统中心计算机任务繁多,调度复杂,需要一个高性能的实时多任务操作系统作为软件的开发平台,目前美国WindRiver System(WRS)公司推出VxWorks实时操作系统在前嵌入式系统领域使用最广泛,市场占有率最高的操作系统。

它以其良好的可靠性和卓越的实时性被广泛应用在军事、航空和航天等实时性要求高的领域中,如导弹发射,卫星导航等。

2 开发流程
火控系统中心计算机是整个系统的接口和控制核心,对外接口复杂,处理任务繁多实时性要求又高,是一个极其复杂的系统,因此设计需严格遵循实时多任务程序开发设计过程,即:需求分析、数流分析、分解任务、定义任务间接口、任务级的设计、模块构筑、任务与系统集成、系统测试。

2.1任务划分
在系统分析的时候,首先看到的是系统的功能。

把各种功能分解成任务,火控系统中心计算机对上通过以太网实时收发来自操控终端和各测量设备的数据及命令,对下则要实时输出处理跟踪数据。

因此我们对任务的划分遵循H.Gomma 原则:
(1)I/O 依赖性;
(2)时间关键性的功能;
(3)计算量大的功能;
(4)功能内聚;
(5)时间内聚;
(6)周期执行的功能。

根据系统需求分析,将火控系统中心机软件划分为数据接收、定时数据处理、操控命令接收三大类任务。

数据接收类任务包含跟踪雷达数据接收任务、视频跟踪器数据接收任务、激光测距机数据接收任务、坐标测定仪数据接收任务。

此类任务接收各设备测量数据及其状态,要求相互独立(某个设备异常不影响其他设备的数据接收),且实时性高,所以此类任务具有最高的优先级。

定时数据处理类任务,根据性能要求及数据率需求原则,分为40ms定时调度任务、
200ms定时调度任务。

40ms定时任务主要完成如下任务:对接收到的数据进行融合、滤波,得到目标现在点位置;由当前系统主工作模式确定各分系统设备的工作模式及参数;发送控制数据到被控设备;发送目标位置数据到火控计算机。

200ms定时任务向操控终端周期的输出系统跟踪数据及状态,以供操控终端显示。

操控命令接收任务是系统进行人机交互的通道,主要接收来自操作手的操控命令,对系统工作模式和工作参数进行设置,此类任务属非实时的任务,因此优先级较低。

2.2任务间接口及通信
该软件中各任务相对独立,但相互之间又有通信,VxWorks操作系统中各任务的内存空间在系统管理下是互不干扰的,但是在任务间通信时,需要对一些内存空间进行共享。

实现内存共享最简单的办法是将需要共享的数据(包括各种数据结构)定义成全局变量。

共享内存最大的好处就是便利、高速,这也有利于系统实时性的要求。

但也有很大的危险性,当该内存区域同时被不同任务访问和修改时就很难保证数据的整合性。

解决这一问题的办法对共享内存部分进行访问上锁,即使用互斥信号量。

互斥信号量更加严格地保护共享资源以及共享资源的任务,同时也为任务间的同步提供了保障。

申请不到互斥信号量的任务即转入阻塞态被放入信号量等待队列中,让出对CPU 的使用权。

若任务得到了互斥信号量,则可以对共享资源进行访问。

互斥信号量只能由申请该信号量的任务来释放。

互斥信号量提供选择字参数options,可以按优先级(SEM_Q_PRIOR ITY )与先入先出队列(SEM _Q _FIFO)两种方式排列等待对信号量进行上锁的任务,在选用优先级方式时,系统提供优先级反转的保护。

2.3任务模块化
该火控系统中心机是全系统接口,与之进行数据交互的设备多,为使程序结构清晰,便于调试,我们以每个设备作为一个程序模块,与该设备通信的所有任务的实现均放在此模块中。

例如跟踪雷达模块,该模块中包含了与跟踪雷达通信端口的初始化、跟踪雷达数据接收任务函数,数据的解析函数,对跟踪雷达的控制数据生成函数,控制数据发送函数等。

将这些函数申明为外部函数,系统中的任务(如40ms任务)可以方便的进行调用,或将函数直接作为任务的执行函数。

这样对程序调试、添加新的功能以及今后的维护工作带来极大的便利。

2.4任务调度
数据接收类任务实时性要求高,此类任务均通过以太网接收,采用UDP协议,调度此类任务使用网络套接字来实现,即操作系统检测到网络套接字有数据到达,相应任务立即抢占CPU,接收数据到缓存数组,无数据到达时任务处于阻塞态,等待操作系统下次调度,如图1。

此类任务的通信数据量不大,耗时短,优先级最高。

图 1 数据接收任务调度
系统中操控命令接收任务实时性要求不高,此类任务的调度同数据接收任务,不同点是此类任务优先级低,接收数据后即处理,即使处理过程被打断,也不会影响任务的执行和系统性能。

系统设计中40ms定时任务是由硬件产生的中断来触发执行,由于VxWorks 中断服务程序不在固定的任务上下文中执行,而且没有任务控制块,所有中断服务程序必须共享一个单独的堆栈,这导致许多VxWorks函数在中断服务程序中被禁止使用。

解决此问题的办法是拆分中断服务程序,即将原来的中断服务程序拆分为中断服务程序和中断服务任务两个部分:新的中断服务程序仅仅执行最基本的中断处理,例如禁止中断、判断中断类型;绝大多数的任务处理,特别是会造成阻塞的任务应该在中断服务任务中执行。

中断服务程序和中断服务任务使用信号灯同步,其程序框架如下:
void intFunc(int param) /*中断服务程序*/
{
intDisable(intNum); /*禁止中断*/

semGive(semInt); /*释放同步信号灯*/
intEnable(intNum); /*重新允许中断*/
}
void intHandle() /*中断服务任务*/
{
while(semTake(semInt,WAIT_FOREVER)!=ERROR/* 若获取信号量成功,则执行相关工作*/

}
3结语
本文介绍了一种实时多任务软件设计方法,通过C语言实现了该设计,经测试和实际使用表明,该方法优化了火控系统软件结构划分,提高了软件运行效率,系统的实时性,准确性均达到设计标准要求,验证了该方法可行有效。

该方法对今后此类软件设计有一定的参考价值。

参考文献:
[1] VxWorks Pro grammer’s Guide 5.5 [M]. Edition A:Wind River Systems, Inc,2002.
[2] 孔祥营,柏桂枝.嵌入式实时操作系统VxWorks 及其开发环境Tornado[M]. 北京:中国电力出版社,2001.
作者简介:韦金生(1981—),男,汉族,天津武清人,本科,工程师,主要从事雷达电子线路设计。