一种基于VxWorks的高速实时数据记录系统的设计
2017-03-16韩新丽
韩新丽
(中航工业西安航空计算技术研究所,陕西西安,710065)
一种基于VxWorks的高速实时数据记录系统的设计
韩新丽
(中航工业西安航空计算技术研究所,陕西西安,710065)
本文针对大规模数据记录系统对嵌入式系统实现的实时性需求,设计了一种采用VxWorks操作系统的嵌入式实现方案,该方案采用模块化的设计架构,利用VxWorks灵活的多任务调度机制和任务间通信机制,建立了一种多任务间通信模型。通过对任务功能的合理划分和任务优先级的设置,该嵌入式系统克服了数据记录过程中数据丢失、数据覆盖的问题,提高了数据记录的实时性和可靠性要求。
数据记录;信号量;环形缓冲区;消息队列
0 引言
随着电子信息产业的迅速发展,数据记录系统越来越广泛地应用在各个领域,例如导弹跟踪、高分辨雷达成像、高能物理、电波天文学以及航空航天测试等. 这些应用领域要求数据必须快速、可靠地记录在存储设备中,用作后续的分析和使用.
由于数据规模的扩大,以往的单任务操作系统或以时间片轮转调度为基础的多任务操作系统无法满足系统的实时性需求,因此需要采用一个多任务硬实时的嵌入式操作系统。VxWorks因其良好的实时性、可靠性被广泛的应用于通信、军事、航空、航天等领域。
本文为了解决数据记录系统高实时性难于实现的问题,设计了一种基于VxWorks的嵌入式方案。本文介绍了系统功能要求,分析了多任务管理与任务优先级设置,建立了多任务间的数据通信模型,最后给出了嵌入式接口实现。
1 系统功能要求
本数据记录系统的功能要求如下:
a.记录4路HB6096总线信号;
b.记录4路差分模拟量输入(AFTI);
c.记录4路高速串口信号,为差分曼彻斯特码编码,RS422电平信号;
d.接收1路RS422信号;
e.输出4个通道,每个通道6路15V地/开离散量;
f.提供1路28V/开离散量;
g.提供可快速拔插的大容量固态电子盘,可连续记录外设数据超过8h;
h.提供串行及网络调试接口;
i.具有瞬时掉电保护功能;
j.数据以FAT32的文件形式存于电子盘上;
l.自动判断电子盘容量,删除老旧文件。
2 系统硬件环境
为了满足本系统的功能需求,本系统的硬件包括机箱、母板、CPU模块、I/O模块、记录模块和电源模块等部件。硬件外部接口关系图如图1所示。
CPU模块采用PowerPC系列的MPC8245处理器,64MB SDRAM, 128MB 用户Flash,4个32位定时器。
I/O模块功能如下:
a.提供HB6096总线接口,总线速率可软件配置为100kbps;
b.提供差分模拟量输入及A/D转换电路;
c.提供4通道、每通道6路的15V开/地离散量输出;
d.提供1路28V/开路离散量输出;
e.底板总线为LBE总线。
为满足容量要求,记录模块提供了1块16GB的IDE总线接口电子盘。
电源模块的输入为28V直流电源,为各模块正常工作提供+5V、±15V直流电压。
3 软件设计
数据记录系统软件主要由VxWorks操作系统和应用软件组成。VxWorks操作系统包括:操作系统内核、BSP(板级支持包)、网络系统、文件系统、I/O系统,应用软件包括配置程序、数据处理程序和掉电处理程序。
图1 数据记录系统外部接口关系图
配置程序用于设定系统参数、检测串口及网口,检测电子盘容量、获取系统时间。
数据处理程序主要包括高速串口记录任务、HB6096记录任务、差分模拟量记录任务、命令处理任务,每个任务由相应的辅助定时器来管理,定时器周期性地采集不同通道的数据,记录任务实时地将数据以文件形式记录到电子盘,采用数据类型、目标机的启动次数及当前时间作为记录文件的名字,这样方便地面回放及分析,日志文件记录系统运行期间的异常情况。
掉电处理程序主要负责目标机掉电时安全地关闭文件。
该系统实现的难点在于如何满足实时采集数据并正确地记录下来,因此系统设计的重点就放在如何提高系统的实时性及可靠性方面。
3.1 多任务管理与优先级
VxWorks支持两种任务调度算法,第1种为基于任务优先级的抢占式调度算法,第2种为时间片轮转调度算法。由于本系统数据采集的实时性有较高的要求,故采用抢占式调度算法。该算法的基本思想是具有更高优先级的任务一旦进入ready状态,将抢占当前运行任务的CPU资源,进行上下文切换后进入运行状态。该算法的好处是可以满足实时调度的需求,以更快的速度响应具有更高优先级的任务。其缺点是在多个任务具有相同优先级的情况下,如果当前任务不被阻塞,它将一直占用CPU资源,造成其它同优先级或低优先级的任务不能执行,所以采用这种算法时要特别注意任务的结构设计。
在嵌入式实时多任务设计中,关键是如何保证软件的实时性。本系统设计中,实时性的保证主要包括多任务的划分、多任务的优先级设置、多任务间的通信方式设计和中断处理程序的设计几个方面。其中任务的合理划分和任务优先级的合理设置对系统的实时性起着至关重要的作用。
通过文中对系统功能的描述,将不同类型的数据划分为不同的任务来处理,并建立相应的写文件任务。高速串口数据量大,采集周期为25ms, HB6096数据量较小,采集周期为12.5ms,差分模拟量数据量最小,但采集周期为2ms,在调试过程中将高速串口的优先级设为最高,HB6096次之,差分模拟量的优先级最小,这样任务间配合比较合理。鉴于差分模拟量的采集周期最短,所以采集20次差分模拟量数据后才进行一次写文件操作,这样可避免频繁操作电子盘引起采集数据受影响。
3.2 多任务间通信模型的设计
VxWorks操作系统支持多种任务间通信方式,主要包括信号量、消息队列、共享内存、管道、信号等,不同的通信方式有不同的适用条件和响应速度。在任务的互斥与同步操作中,信号量是最快的一种通信机制。另外,消息队列作为一种任务之间的高级通信机制,提供了完善的响应式交互信息方式,在单CPU系统中广泛应用。在本数据记录系统中,为了达到更加快捷高效的任务间信息传递,本系统结合使用了信号量和消息队列,同时还应用了共享内存的环形缓冲区机制来进行任务间的数据交互。
同类型数据的接收任务和写文件任务可能会同时访问全局变量或共享内存,这时如果没有一定的保护机制可能会产生意想不到的后果。本系统应用二进制信号量来协调任务间的同步和互斥。采用这种响应速度最快的互斥与同步手段也加强了系统响应的实时性。当任务需要访问全局变量或共享内存时,首先通过semTake()操作来获取一个信号量。这里将semTake()的等待时间设为WAIT_FOREVER,即任务若获取不到该信号量则永久阻塞。
基于本系统分层化、模块化的思想,处于不同层中任务的工作状态是相互独立的,因此需要进行数据交互时只需要操作消息队列即可。驱动层将数据加上帧头组成数据后将其作为消息发送到消息队列中,应用层的接收任务一直等待接收下层的消息,一旦消息队列中有未处理的消息,则马上处理。这种通信方式可以有效的避免由于外部接收数据过快或者上层写文件较慢造成的数据覆盖问题,起到了数据缓冲处理的作用。对于控制帧信息来说,将其优先级设置为高于普通的数据帧,这样新收到的控制帧信息可以插在消息队列的头部,提高了系统对关键控制帧的响应速度,这同时提高了系统的实时性。
嵌入式系统的板载RAM资源非常宝贵,在本系统中,数据帧的最大长度为514个字节,同时由于数据收发频率非常快,所以数据处理需要占较多内存空间。由于采用的消息队列通信机制在进行消息传递时采用的是内存拷贝机制,这样当消息队列中的消息长度过大时会影响队列的操作速度和占用较多的内存资源,进而会影响系统的实时性。
本系统采用的解决方案是在驱动层和应用层各设置一个环形缓冲区,驱动层将数据放入环形缓冲区,然后将信息帧地址和信息帧长度作为消息发送到消息队列中。应用层由于写电子盘的速度比接收数据的速度慢,所以接收任务将数据先放在环形缓冲区中,再以信号量的方式通知写任务将数据写入电子盘中,这种方法有效地提高了数据的处理速度及系统响应的实时性。
实际编程过程中,由于每个数据采集任务都是采用辅助定时器控制采集周期,定时器计时结束后发送一个中断信号,调用中断服务处理函数发起采集数据操作,中断处理不能占用太多时间,否则会引起数据丢失,所以定时器中断中只是调用semGive()系统函数发送一个信号量,由发起任务具体处理采集记录操作。
3.3 数据通信接口
嵌入式系统最终要与外部进行数据交互,在实时系统设计中,I/O操作的可靠性和实时性也是系统设计的重要指标。
VxWorks的I/O系统可以提供简单、统一、与设备无关的接口,应用程序通过打开指定的文件来操作I/O设备。一个指定的文件可以是一个非结构化的原始设备,如:一个串行通信通道或一个任务间管道。本系统中的RS422就采用这种驱动,将串口的操作视为对一个文件的操作,不用关心设备或程序驱动的细节,因此该驱动相对开发起来容易一些。
高速串口驱动、HB6096驱动及差分模拟量驱动由于数据量比较大,采用绕过操作系统,直接访问设备的驱动程序,这样可以高效访问设备,减少了系统开销和操作时间。
由于用户要求将采集的数据以FAT32的文件格式来存储,所以电子盘驱动需以块设备的驱动程序来开发,是本系统中比较复杂的驱动。在VxWorks中,文件系统是作为驱动程序挂接到I/O系统中,应用程序对设备的I/O操作都是由I/O系统传递给文件系统,文件系统来访问真正的电子盘驱动程序。
4 结束语
本文提出了一种基于VxWorks实时操作系统的协同数据记录嵌入式方案,设计了数据记录系统的整体框架。该系统充分利用了VxWorks的多任务支持,采用信号量和消息队列保证任务间的同步和通信,利用任务优先级的高低来保证对外部响应的实时性。通过合理的任务划分和任务优先级设置,该嵌入式系统基本满足数据记录的实时性和可靠性需求,同时,该设计方法对其它嵌入式应用也具有一定的借鉴作用。
[1]闫得杰.基于VxWorks 的多任务程序设计及通信管理[J].光机电信息,2009, 27(9):64-66
[2]王永亮, 李秀娟. 嵌入式多任务程序设计[J]. 电子科技,2010, 23(1): 94-96.
[3]陈智育, 温严军, 陈琪等. VxWorks 程序开发实践[M]. 北京:人民邮电出版社, 2004-05: 107-127.
[4]杨扬.VxWorks 下数据采集卡驱动程序开发[J].现代电子技术,2008,31(7):113-114.
[5]李方敏,VxWorks高级程序设计,清华大学出版社,2004年5月
[6]周启平,张杨,VxWorks下设备驱动程序及BSP开发指南,中国电力出版社,2004年9月
A Design of High Speed Realtime Data Recorded Software Based on VxWorks
Han Xinli
(Xi’an Aeronautics Computing Technique Research Institute, AVIC,Xi’an Shanxi,710065)
In order to fulfill the high real-time requirement that the mass datas recorded software needs in practical design , a scheme is proposed by using an embedded system based on VxWorks. This embedded system takes advantage of the excellent real-time performance, multitask scheduling technology ofVxWorks and the modularized and layered designing concept. A model which based on the multitask communication mechanism is established. By reasonable division of the task function and the priority settings of the tasks, the system overcame problem that data is lost and overlaid during recording , the system designed designed implements the high real-time and reliability requirement in mass datas recorded software.
data recording;binary semaphore;ring buffer;message queue