APP下载

基于VxWorks的嵌入式多协议通信控制器设计

2022-03-04张明利许清清李阿明

仪器仪表用户 2022年3期
关键词:队列数据包内核

张明利,许清清,李阿明,施 群,王 道,顾 杰

(上海无线电设备研究所,上海 201100)

0 引言

通信控制器是工业和军事领域快速组网的关键部分。目前武器系统的通信接口相对单一、滞后,形式基本停留在协议的单对单转换,这种状况很难满足系统中各型号设备间对接以及系统的更新和扩展要求。实现方面主要基于以MCU为核心的自制电路,用汇编或C语言编写控制环完成接口控制、数据通信。这样的设计思路在系统资源、功能需求相对单一时可以胜任,如果系统接口多、功能复杂,对信息处理能力要求较高,解决如何管理系统资源(I/O、存储器、协议栈等),在数据和资源引用上始终保持一致,并且在此基础上高效可靠地实现通信控制等问题就显得非常繁复。这时实时操作系统(RTOS)就变得尤其重要。

实时系统在各高精尖技术领域迅猛发展,作为嵌入式应用软件的基础和开发平台,其主要任务是对事件进行实时处理。事件可能在无法预知的时刻到达,但软件必须在事件发生时在严格的时限内做出响应。

VxWorks操作系统是美国Wind River System公司于1983年设计开发的一种嵌入式实时操作系统[1],因其高可靠性、高灵活性和卓越实时性被广泛应用在军事、通信、航空航天等要求强实时性的领域[2],如军事演习、弹道制导等。美国F-16、FA-18战机、B-2隐形轰炸机、爱国者导弹以及97年登陆火星表面的探测器上都使用了VxWorks。

在应用VxWorks的嵌入式系统中,网络通信起着重要的作用,是嵌入式系统与其他系统交互的主要途径[3]。针对目前某些武器系统接口需要,为了满足多种标准接口间互联和当前武器系统中各设备的接口形式,减少系统中相关设备数量,从根本上提高系统的可靠性和扩展能力,本文提出了一种基于VxWorks的嵌入式多协议通信控制器设计方案,在实现上述设计目标的前提下,与传统设计方式相比,还具有系统可靠增强、开发时间缩短、系统升级维护方便等优势。

1 总体设计

1.1 系统结构

控制器为不同接口的数传设备提供数据传输通路,作用相当于网络架构中的应用网关。系统中设备接口包括:以太网、并口、RS232和RS422等。相关设备间数据传输方向符合特定应用的规定,控制器面板的屏幕实时显示工作参数,可以通过键盘和鼠标控制控制器的工作状态,同时具有实时存储各种数据的能力。

系统拓扑采用星形网,以控制器为数据交换中心,外接各种设备。具体结构如图1。

图1 系统拓扑结构Fig.1 System topology

1.2 硬件平台

本文设计的控制器基本硬件模块采用MB890 Mini-ITX。它是一块高度集成、小功耗、大温宽、高稳定性的CPU模块,提供了多个串口、USB口、并行口、VGA和LVDS等显示卡接口,并采用了千兆以太网卡。Pentium M CPU工作主频是1.2 GHz,内存为1GB,可满足一般数据处理和通信的要求,且支持在今后的设计中做进一步的扩展。启动方式选择为CF卡启动,最终的映像文件下载到CF卡内,控制器上电自动加载运行。

1.3 软件平台

数据处理和传输实时性要求较高,处理过程中不能阻塞,控制器连接多个数据设备,所以需要宏观上发起并运行多个任务。选择强实时系统VxWorks主要基于其优秀的时间性能和可靠性。

VxWorks的核心是一个高性能微内核。该内核支持所有实时功能,包括高效的实时多任务调度、中断管理、实时的系统资源以及实时的任务间通信。内核最小可被裁剪到8KB,400多个相对独立、短小精炼的目标模块可根据需要选择和配置系统,保证系统稳定和可靠。

Wind内核的缺省调度策略是基于优先级抢占式,同时它也提供了时间片轮转调度。内核支持256级优先级,一般应用程序任务的优先级在100~255之间,控制器主要任务共有5个。

一般来说,实时操作系统都是多任务的。Vxworks中内核调度策略、信号量、中断服务程序等直接支持构建实时多任务系统。VxWorks的内核保证任务切换在μs级,I/O操作时间短,实时响应硬件中断,保证数据传输和处理的实时性。

VxWorks具有较清晰的层次结构。系统软件部分可以分为2层,基本结构从BSP[4]开始,包括目标机加电后硬件初始化、操作系统初始化和一些基本硬件的驱动,它贯穿硬件、操作系统和上层应用,是移植系统到目标机的关键。与其他硬件的驱动程序一起,这部分都是和硬件相关的。VxWorks库、I/O系统和文件系统等系统软件,这部分和用户的应用软件一起构成与硬件无直接关系的软件。该层次结构是VxWorks高效灵活的原因。由于层次结构和BSP的存在,同样的应用模块可以在不同的硬件平台上移植。这对于大系统的扩展很有意义,同时是相比MCU加汇编这样的传统设计的优越之处。

2 通信协议设计

目标机采用X86架构CPU,机器对存储器字节排序为小端模式(little edian),规定系统中设备的数据帧格式,作为控制器处理信息数据的规则。管理机采用以太网接口,以UDP协议工作,承担接收系统中其他接口设备的数据和发送本机数据至其他各设备的任务。生成的数据帧格式如图2。前3byte指定了该数据包数据量,便于内存缓冲区开辟。Byte4标识出所要路由的目的设备,byte5留待做检验,之后是实际的信息byte

图2 管理机的数据帧格式Fig.2 Data frame format of the management machine

各下位机设备所发出的数据包有统一的帧格式,定义如图3。前1byte标识出数据包来源设备,后3byte表示数据帧总长度,最后是实际发送的信息数据。

图3 各接口设备的数据帧格式Fig.3 Data frame format of each interface device

下位机标志位以接口类型区别,定义见表1。

表1 设备标志位定义Table 1 Definition of device flags

3 控制器软件设计

3.1 软件结构

软件部分划分为BSP、内核、应用程序软件。BSP部分主要根据目标机MB890配置相关文件。其中,最主要的是.. argetconfigpcPentiumconfig.h,在该文件中配置启动方式和使用的网络控制芯片等内容,最后的映像文件(image)所包含的程序结构如下:

BSP部分,严格说还有如网络控制驱动部分,需要针对目标机的配置件分别编写或修改、编译,以打通整个硬件系统。内核作为硬件相关软件,支持调度运行应用程序中的各个任务[5]。应用软件部分则严格按照应用要求,分为6大模块,如图4。

图4 主控软件结构Fig.4 Main control software structure

3.2 系统任务设计

3.2.1 任务的划分与功能描述

在实时多任务系统开发中,任务划分对系统运行至关重要。而任务划分存在以下矛盾:如任务太多,必然增加系统任务切换的开销,同时任务间频繁通信也会增加系统负担;如任务太少,系统的并行度就会降低,实时性就得不到保证。任务划分一般要遵循H.Gomma原则,即I/O原则、时间优先级、大计算量功能、功能内聚、时间内聚和周期性执行功能。根据H.Gomma原则,控制器主要任务划分为:网络检测任务、初始化任务、网络接收任务、数据包解析与转发任务、接收多接口设备数据任务。分别说明如下:

网络检测任务:主要监测网络状态,出错即关闭网络并重新初始化控制器。这个任务的优先级定为最高,为120。它是控制器工作的基本保证。

初始化任务:执行系统初始化操作,初始化套接字并打开控制器上相应接口,如RS232、RS422等。创建消息队列,为消息队列创建实现同步的计数信号量。生成系统中其他任务,该任务优先级为122。

网络接收任务:系统网络通信的传输层采用UDP协议,以Socket套接字机制实现。任务在控制器初始化套接字后进入循环,等待管理机端的数据包。此时任务处于阻塞状态,一旦数据包传来,就将数据包送入消息队列缓冲,然后释放信号量。任务优先级为124。

数据包解析与转发任务:该任务是一个循环条件为semTake()的循环任务,一旦消息队列里有数据包,那么它就可以得到对应信号量,任务就解除阻塞,接收数据包,同时根据协议解析数据,解析完后直接转发给其他接口设备。任务优先级为126。

接收多接口设备数据任务:任务采用挂接中断服务程序方式,等待各种接口设备,如RS232、RS422设备向控制器发送数据。根据应用对中断安排优先级,该任务接收数据后直接转发,因为目的地只有管理机。该任务的实现也可采用select机制处理。任务优先级为124。

3.2.2 任务间调度与通信机制

控制器网络接收任务将接收管理机端通过网口发送来的数据包,根据数据包的路由标示,选择目的地址转发。接收多接口设备数据任务也会监视各接口设备是否有数据要发往管理机。这两个任务的优先级一样,采用时间片轮转调度方式。控制器有一定容量的缓冲帧数,接收、解析、转发任务并行。对于多种接口设备发来的数据帧,控制器响应中断,接收数据。

VxWorks系统任务间通信手段包括消息队列、管道、信号量、共享内存、Socket套接字和信号,是协同各任务工作、控制任务时序的关键。控制器主要使用Socket套接字、消息队列和信号量。网络接收任务接收数据包,据协议约定得到数据包大小,开辟相应内存,接收完后直接发到前向消息队列(网口至下位多接口设备),同时释放一个信号量semMsgRecv,有数据从管理机端发来则一直接收。如果有数据来自下位设备,则启用时间片轮转调度。数据包解析与转发任务等待接收量semMsgRecv,如没有则任务阻塞,一旦开启就从消息队列中取出数据包解析出目的地址后直接转发。网络接收任务与数据包解析与转发任务间的通信采用消息队列,以计数器信号量作为触发,保证实时性。系统任务间调度和通信方式见表2。

表2 任务分配表Table 2 Task allocation table

4 实验结果

在usrAppInit.c的应用程序入口函数usrAppInit()里加入应用初始化程序,屏幕打印出Muti-Protocol comm controller is ready to work!,VxWorks 加载界面正确。说明VxWorks内核已正确加载至目标机内存,BSP移植完全正确,系统控制流已转至应用初始化程序。

任务间的通信是控制器系统有效工作的关键部分,下面给出控制器网络接收任务与数据包解析与转发任务间数据流的部分测试结果,如图5。对比测试数据,测试结果显示正确。

图5 任务通信测试部分结果Fig.5 Partial results of the task communication test

5 结论

通信控制器作为一般组网的中心结点,可靠性和稳定性至关重要。本文采用MB890 CPU模块,以VxWorks作为软件平台。该软件经过美国DO-178认证,可靠和稳定性突出。今后的专用网发展一定会向多功能、高速率、强实时方面发展。传统的使用一般MCU自己搭建硬件平台,把应用代码和系统资源管理代码混在一起的设计方法今后可能无法适应变化。基于操作系统的设计稳定可靠,便于代码重用,节省开发时间。同时,代码重用也是软件可靠性的保证。本文给出了通信控制器在这种方式下的设计方案,说明了设计细节,在专用网设计方面是一个很好的解决思路。

猜你喜欢

队列数据包内核
二维隐蔽时间信道构建的研究*
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
基于车车通讯的队列自动跟驰横向耦合模型
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
队列队形体育教案
队列里的小秘密
微软发布新Edge浏览器预览版下载换装Chrome内核
C#串口高效可靠的接收方案设计
青春的头屑