基于VxWorks实时操作系统的多串口通信系统的实现

2013-06-05 13:30刘亘炜
火控雷达技术 2013年1期
关键词:子类实时性串口

雷 瑛 刘亘炜 张 安 张 磊

(西安电子工程研究所 西安 710100)

1 引言

VxWorks是一个具有微内核、可裁剪的高性能强实时操作系统,它以其良好的可靠性和卓越的实时性被广泛地应用在工业控制、医疗器械、航空航天以及国防电子等高精尖技术及实时性要求极高的领域中[1]。相对于RS-232串口,RS-422串口具有抗干扰能力强、通讯速率高、通讯距离远等特点,在嵌入式实时操作系统中使用串口通信,不仅可扩展嵌入式设备通信能力,而且可扩大其应用范围。

2 VxWorks简介

VxWorks是美国Wind River System公司推出的一个嵌入式实时操作系统,主要特点有:

a.微内核Wind具有快速多任务切换、抢占式任务调度、中断延迟小、任务间通信手段多样化、网络流量大等特点。b.VxWorks系统具有良好的可裁减能力,用户可根据自己系统的功能目标通过交叉开发环境方便地设置。c.支持应用程序的动态链接和下载,缩短了编辑和调试的周期。d.具有良好的兼容性,在不同运行环境间可以方便的移植,减少了开发周期和经费。

3 设计思想

3.1 背景需求

某多功能雷达为有效适应复杂作战任务和战场环境,多个分系统之间均有数据量较大的实时通讯,并要求响应时间快,处理迅速。系统硬件设计选用定制方式将计算机模块和大规模可编程器件FPGA作在一块印制板上,采用F81218多串口芯片扩展了6个标准RS422串口,将2个计算机自带的可设串口也设为标准RS422串口,系统硬件原理图如图1所示。软件采用VxWorks 5.5开发,能很好地解决以上问题。

图1 系统硬件原理图

3.2 BSP修改

VxWorks 5.5附带的BSP版本为1.2.3,该版本BSP已经内置串行通讯接口的驱动,但是默认仅能驱动大多数主板附带的COM1和COM2两个串口,为了满足该项目应用需求,需要修改BSP,以添加对COM3~COM8串行接口的驱动支持,修改如下:

a.在VxWorks内核组件中加入hardware→periphe→serial中所有组件;

b.在BSP文件夹pc.h文件里加入8个串口对应地址:

添加串口中断号定义,其中COM3~COM8共享5号中断:

c.在 sysSerial.c文件的表 I8250-CHAN-PARAS devParas[]中加入对新添加串口设备的映射:

添加中断服务程序对共享中断的处理[2]:

若以上添加成功,在 VxWorks启动后可以用devs命令查询到新添加的串行设备。

3.3 软件设计

VxWorks对于串口的操作是通过I/O系统提供的 create、open、read、write、close、delete、ioctl等控制接口实现,分别完成串口创建、串口打开、读串口、写串口、关闭串口、删除串口,串口设置等操作[3]。串口基类完成对串口基本参数的设置及工作流程的构建,各个子类与基类不同的处理过程通过纯虚函数重载来添加。根据不同标志(FLAG),转入相应的串口子类程序。系统软件模块图如图2所示。

图2 系统软件模块图

串口通信协议如下所示:

4 程序示例

4.1 基类串口初始化

在基类中完成对所有串口基本工作参数如工作模式、设备控制字、输入输出缓冲区等的设置,程序举例如下[4]:

4.2 基类启动串口接收和处理数据线程

在基类中定义串口收数任务(任务1)和串口数据处理任务(任务2)。串口收数任务实时监测串口是否有数据到来,一旦监测到有数据则全部读取并交由数据封包函数按照通讯协议根据字头、数据长度打包;数据封包函数一旦收满一包数则释放信号量通知串口数据处理任务。串口数据处理任务一旦获取信号量则根据FLAG不同转入相应的串口子类数据解析函数根据数据类型的不同进行相应的处理,程序举例如下:

4.3 基类写串口

将传进来的数据写入相应的串口,程序举例如下:

4.4 A子类构造及重载函数

在串口子类构造函数中定义FLAG的具体值;在子类重载函数Open()中调用基类串口初始化函数重新定义该串口特有的一些工作参数;在子类重载函数parse(const BYTE* pBYTE,const int size)中对传进来封好包的数据进行进一步解析,根据数据类型的不同转到相应的处理函数进行处理。Open()和 parse(const BYTE* pBYTE,const int size)在基类中设置为可重载的纯虚函数,程序举例如下:

5 结束语

本文描述了在实时操作系统VxWorks中对多串口系统实现数据通信的方法,并给出了示例程序,该方法适用于工业控制等多方面。VxWorks以其优异的实时性和可靠性,增强了了串口通信能力,并且扩大了其应用范围,能适应数据量大,多任务、多响应、实时性要求高的环境。

[1]徐惠民.基于VxWorks的嵌入式系统及实验[M].北京:北京邮电大学出版社,2006.

[2]孔祥营,张保山,俞烈彬.VxWorks驱动及分布式编程[M].北京:中国电力出版社,2007.

[3]张杨,于银涛.VxWorks内核、设备驱动与BSP开发详解[M].北京:人民邮电出版社,2009.

[4]孟英谦,王玲.嵌入式VxWorks实时操作系统中串口通信的实现[J].软件技术,2003(1):52~54.

猜你喜欢
子类实时性串口
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
基于EM9000工控板高性能双串口通信模型设计与实现
Java面向对象编程的三大特性
汉语儿童早期子类名词获得研究
Java类的继承
船舶电子设备串口数据的软件共享方法
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
可编程控制器的实时处理器的研究
CSerialPort 类分析及漏洞的修正