摘 要:基于面向对象的思想,结合嵌入式软件开发的特点,在机载综合情报显示系统软件设计中,为达到在不同操作系统上运行的要求,将数据获取及处理和数据的使用分开,在操作系统上封装一层硬件依赖型接口,实现了不同的操作系统享用统一接口和同一段代码,增强了代码的复用性。 关键词:面向对象;嵌入式;软件复用;组件
1.嵌入式系统简介 嵌入式系统被定义为:以应用为中心,以计算机技术为基础,软件、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗的严格要求的专用计算机系统。嵌入式系统主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,他是集软硬件于一体、可独立工作的“器件”。嵌入式软件包括与硬件相关的底层软件、操作系统、图形界面、通讯协议、数据库系统、标准化浏览器和应用软件等。与通用计算机设计的软件不同,嵌入式软件通常无法在不做显著修改的情况下在其他嵌入式系统中运行。这主要是由底层硬件之间的明显不同所至。每个嵌入式系统的硬件都是为特定的应用专门调整过,这样才能使系统的成本保持很低。
早期的嵌入式软件只用目标处理器的汇编语言书写。 这样做使程序员可以安全控制处理器的其他硬件,但通常程序的代码量比较大。随着嵌入式系统应用范围的不断扩大和嵌入式实时操作系统RTOS(Real Time OperatingSystem)的广泛使用,高级语言编程已是嵌入式系统设计的必然趋势。因为汇编语言和具体的微处理器的硬件结构密切相关,移植性较差,既不宜在复杂系统中使用,又不便于实现软件重用;而高级语言具有良好的通用性和丰 富的软件支持,便于推广,易于维护。因此高级语言编程具有许多优势。

2.面向对象技术 面向对象的基本思想就是以一种更接近人类一般思维的方式去看待世界,把世界上的任何一个个体都看成是一个对象,每个对象都有自己的特点,并以自己的方式做事,不同对象之间存在着通讯和交互,以此构成世界的运转。对象的特点就是他们的属性,而能做的事就是他们的方法。在面向对象编程中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层次结构,即:程序=对象+类+继承+消息。程序设计是以对象为中心,以消息为驱动。程序的基本元素是对象,程序一般由类的定义和类的使用组成,程序中的一切操作都是通过向对象发送相应的消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。用面向对象方法解决实际问题的基本做法是:分析确定解决该问题所需要的类和对象,确定他们之间的关系及每个类中应该包含的属性和应该提供的服务,然后向相应的对象发送消息,要求他们提供指定的服务,从而完成预定的功能。
面向对象的建模,就是把系统看作是相互协作的对象,这些对象是结构和行为的封装,都属于某个类,那些类具有某种层次的结构。系统的所有功能通过对象之间相互发送消息来获得。面向对象的建模可以视为是一个包含以下元素的概念框架:抽象、封装、模块化、层次、分类、并行、稳定、可重用和可扩展性。

3.面向对象技术在机载综合情报显示嵌入式系统中的应用 3.1 机载综合情报显示系统简介 机载情报综合显示系统是一种地空数据链系统的终端。随着航空平台的不断丰富和地面对信息实时传输要求越来越高,需要建立一系列的空地数据传输链路来适应各种不同的航空平台执行各种不同的任务,而数据链路的高速率、高可靠性以及抗干扰能力是保证信息发挥效能的关键环节。该系统主要由5大部分组成,结构如图1所示。雷达情报系统通过地面雷达网获取雷达情报,再将多个雷达的情报进行情报融合,融合后的情报通过地面网络传到情报分发系统,分发系统对情报分类,再将其分别分发给机载显示系统和地面监视系统,机载显示系统接收地面和GPS的数据,在显示器上以直观的图形方式显示飞机的位置和周边情况,同时,机载显示系统将GPS数据和目前自身的状态下行给地面监视系统,地面指挥人员可以对飞机的飞行情况实时监测。
3.2 机载综合情报显示系统工作要求 该系统中机载设备是一个嵌入式系统,操作系统为RT-Linux,地面监视系统为Windows 2000,处理机处理后的数据通过串口传给综合显示器显示,GPS机采集的数据也通过串口将数据传给综合显示器。对软件的要求是: (1)能在Windows和RT-Linux两套操作系统上同时运行。 (2)将所有数据以图形的直观形式显示。 (3)显示系统可响应按键,飞行员能选择不同的画面来显示情报。 (4)显示系统中加装电子地图,以标示飞机的位置和导航。
3.3 面向对象建模分析 面向对象的方法克服了原有软件系统规模庞大、研制周期长、维护费用高、软件系统过于复杂、应用软件不易集成等困难。随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(ObjectModeling Technique)。 这是一种自底向上和自顶向下相结合的方法,而且他以对象建模为基础,不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构。嵌入式软件设计中基于端口对象(PBO)的组件模型和软件设计方法[1]具有很大的通用性,他不依赖于任何商用的计算机辅助软件工程(CASE)工具,而且能够应用于绝大多数的集成应用环境和实时操作系统。这种模型通过动态调度可以获得良好的实时性。针对该软件特殊的应用,将该系统的硬件和软件可大致抽象为4层,如图2所示。
嵌入式系统的硬件结构往往是千差万别的,硬件的设计有时也会根据特殊的需要进行调整和改动。采用上述的分层方法,使用标准C或者标准C++编写上层的应用程序,把与硬件及操作系统相关的接口完全封装起来,对上层应用程序编写者来讲,完全感觉不到底层的变化,硬件变化或操作系统改变只需将硬件依赖型接口内部改变即可,这样就能满足程序运行于不同操作系统上的需要,并且可以是现在不同系统下采用统一的接口。
在机载综合情报显示系统中,主要从串口获得各种数据,然后根据当前显示的阶段绘制屏幕。所以,整个应用程序框架可抽象为串口操作类、数据处理打包类,显示阶段类以及图元组件库。 (1)串口操作类 串口操作类将操作系统对串口操作的接口再次封装,对不同的操作系统提供统一的接口,以便于应用程序的开发。
(2)数据处理打包类 从串口接收到的各种数据,对其进行分类,打包为不同的数据包,每个数据包有自己的ID,各个对象根据ID区分数据,同时从数据包中获得数据。这样就把输入数据的接口统一起来。例如,本机信息包为IPackage_SelfPlane,其中有本机的经纬度、航向角、速度、高度以及本机机号等,数据处理打包类获得从串口来的数据后只刷新数据包中的值。这样也就将数据的处理和使用完全分开,增强了程序的灵活性。对于按键的处理,也采用数据包的形式,接收到的按键打包为IPackage_Key包,针对不同的按键各个不同的阶段做出不同的响应。
(3)阶段对象 显示系统要求以不同的画面显示各种数据,例如,普通的GPS接收机工作时,有星图、定位、查看数据、导航、穿云、返航等不同的阶段,从抽象的角度来看,这只是把数据用不同的图形组合显示出来,因此设计一个阶段类IStage,所有的阶段都从他继承来,IStage中的方法在不同的阶段具有多态性,这样也能将阶段的接口统一起来。
(4)图元组件库 在应用程序设计中,有大量的图形绘制,根据显示画面的设计,有很多图形要多次使用,采用基于组件的思想,先设计好一系列的组建库,其中包括一些基本的图元,如三角形、矩形、圆、坐标轴等,不同的显示画面由不同的组件或组件间的不同关系集成。这样,进入某一个画面后,该阶段对象从数据中选取本阶段显示需要的数据,并用来设置好组件的参数,然后现实绘制。
在上述的框架中,具体细节可采用不同的设计模式来实现,其交连关系图如图3所示。

3.4 统一接口设计实例 Linux和Windows操作系统对串口的操作有很大区别的,为此定义IComm对象来提供串口操作的统一接口:


从这个类继承出2个派生类CommWin32和CommLinux,分别来操作2个系统下的串口。IComm对象中所有的接口都是纯虚函数,利用面向对象的多态特性,CommWin32和CommLinux中对同一个接口有不同的实现代码。
通过采用面向对象的设计思想,实现了在RT-Linux和Windows下同时共享一段代码,加快了软件开发周期,也提高了效率,同时软件也具有很大的扩展性,为将来软件的升级和硬件的修改提供了可能性。
4.结语 采用C++语言和嵌入式软件特点相结合,在综合运用如多级抽象类型定义、实体生成类(Facto ryclass)、指针隐蔽等基于C++的程序设计的基本技法的基础上,在不依存于具体程序设计语言的更高抽象层次上,对对象进行抽象描述,隐藏具体实现细节,使程序结构易于扩充,缩短了开发周期。本软件作为一个项目已开发完成,并在飞机上试飞成功,正在进行产品化,评价良好。 |