跟踪雷达在跟踪高速目标时,需要有足够快的反应速度,这不仅对它自身的硬件系统的实时性要求较高,而且对相应软件系统的实时性要求也较高。用实时操作系统VxWorks作为跟踪雷达系统中的操作系统,可以满足软件对实时性需求。
本系统中,跟踪雷达各分机设备在相应处理计算机、控制计算机控制下协调工作,完成对目标的跟踪和测量雷达的引导,各分控计算机之间通过以太网接口相互通讯。跟踪雷达软件按功能分为主控、显示、信号处理、伺服控制、高频控制、光电控制六个子系统,分别对应不同的计算机。其中主控、信号处理、伺服控制、高频控制、光电控制子系统上都使用VxWorks操作系统,如图1所示。
VxWorks具有高度可剪裁的微内核结构,它需要的存储器空间大约为8KB~488KB(ROM)、620B~29.3KB(RAM)。可见VxWorks有着极好的可伸缩性,用户可以利用工具或直接修改内核源文件来配置内核。VxWorks能进行高效的多任务调度,它支持中断驱动的优先级抢占式调度和时间片轮转调度,并具有确定的、快速的上下文切换能力,确定的、微秒级的中断延迟时间。这些使得内核具有非常强的实时性。
除了性能出众的操作系统外,WRS公司还提供了优秀的实时操作系统开发工具Tornado。Tornado包含三个高度集成的组件:Tornado工具,一套强大的交叉开发工具;VxWorks实时操作系统;一整套主机-目标间的通讯选项,例如以太网、串行线路、在电路仿真(ICE)和ROM仿真等。
图2是Tornado开发系统组成框图,左边的框代表Tornado集成开发环境,它运行在开发主机上,可以基于WIN9x、WINNT、DIGITAL
UNIX等主机操作系统。本文介绍的内容都是基于WIN9x系统的。右边的框代表目标机,目标机支持的CPU类型有MC680x0、PowerPc、SPARC、SPARClite、i960、x86、R3000、R4000、R4650等。目标机上运行VxWorks实时操作系统,其上层运行用户应用程序。
Tornado集成了用于VxWorks应用程序开发和调试的各种工具。开发者在主机系统里,利用这个集成环境组织、编写、编译和调试应用程序,然后下载到目标机上运行、调试。编译在主机上完成,测试、调试需要主机目标机协调完成,流程如图3所示。
2 VxWorks在信号处理子系统中的应用
信号处理子系统采用摩托罗位的COMPACT
PCI计算机,它的CPU为PII233MMX。该信号处理子系统的主要任务是通过网络接收来自主控子系统的数据和命令,传送给信号处理板;并且还要读取信号处理板的处理结果,将其通过网络传送给主控子系统和显示子系统。信号处理子系统软件可分为两部分:一是驱动程序,负责对信号处理板的初始化、配置和访问,另外用中断方式来响应信号处理板;二是网络通讯程序,负责与主控机握手、接收数据报文和发送数据报文。它的组成如图4所示,当信号处理板产生数据后,发出一次中断,中断服务程序触发发送进程读取信号处理板上的数据,然后发送给网络。网络通讯程序主要由五个并发的进程组成:poopClient、BDPReceive、intProc20ms、intProcGate和messageHandle。PoopClient进行负责和主控子系统握手,获取主控机在线信息,以及传送本子系统在线信息。BDPReceive进程接收网络数据,然后送给messageHandle进程,经处理后再送到信号处理板上。IntProc20ms和intProcGate进程从信号处理板中读出数据,然后发送到网络中去。
STATUS appMain (void)
{
……
/* Connect the ISR */
if (pciIntConnect (INUM_TO_IVEC
(INT_NUM_IRQ0+dsp_intLine),(VOIDFUNCPTR)dspISR,0)= =ERROR)
……
/* Create some tasks */
if(taskSpawn("poop",100,0,2048,(FUNCPTR)poopClient,0,0,0,0,0,0,0,0,0,0)
= = ERROR)
……
if (taskSpawn("BDPRecv",80,0,2048,(FUNCPTR)BDPReceive,0,0,0,0,0,0,0,0,0,0)
= = ERROR)
……
if(taskSpawn("intProc20ms",70,0,2048,(FUNCPTR)intProc20ms,0,0,0,0,0,0,0,0,0,0)
= = ERROR)
……
if(taskSpawn("intProcGate",60,0,2048,(FUNCPTR)intProcGate,0,0,0,0,0,0,0,0,0,0)
= = ERROR)
……
messageHandle ();
return (OK);
{
……
switch (intType)
{
case INT_20MS;/* INT_20MS=1 */
……
semGive (sem20ms);
break;
case INT_ACQGATE: /* INT_ACQGATE=2 */
……
semGIve (semAcqGate);
break;
default:
……
break;
}
……
}
void intProc20ms()
{
……
FOREVER
{
semTake (sem20ms,WAIT_FOREVER);
……
}
……
}
void intProcGate ()
{
……
FOREVER
{
semTake (semAcqGate,WAIT_FOREVER);
……
}
……
}
信号处理子系统的程序开发是基于BSP的cpv5000,它为PCI设备提供非常好的支持,使得开发者对PCI设备访问变得非常轻松,VxWorks的网络功能也很健全,网络通讯易于实现。另外,VxWorks的多任务性及丰富的进程通讯机制为实现复杂的功能提供了必要的手段。本文中提到的所有功能都已在具体的项目中实现,VxWorks稳定可靠,实时性完全满足项目的需要。