APP下载

用Linux实时系统设计飞机电子水平状态指示仪软件

2010-06-05吴吉祥夏靖波杜华桦

电光与控制 2010年3期
关键词:缓冲区使用率复杂度

吴吉祥,夏靖波,杜华桦

(空军工程大学电讯工程学院,西安 710077)

0 引言

由于液晶显示器具有对比度高、在阳光下清晰可见、以及重量轻等特点,液晶式电子水平状态指示仪(EHSI)在飞机座舱中得到普遍应用。但是,液晶式电子水平状态指示仪的应用会遇到以下问题[1]。1)图形处理速度。光栅式图形显示系统在显示一个图形前,需要进行图形扫描变换、反走样和图形旋转等大量运算,随着显示分辨率的提高,要处理的像素越来越多,而所允许的处理时间却受屏幕的刷新率所限制。所以实时图形生成系统对处理器处理速度提出了非常高的要求。2)显示帧存的设计。随着图形显示分辨率的提高,要显示的像素越来越多,将待显示的像素写入帧存是一个颇耗时间的操作,这将影响图形的实时生成。3)EHSI所显示的全罗盘画面,是需要根据飞机的参数实时变化的动画,动画的显示是先把它在旧的位置擦除,再在相近的新位置生成,而要正确地擦除旧画面,需要对图形显示的状态作一串精确的记录,保持这一串存储记录需要非常大的数据结构,这影响图形实时生成。因此,如何加快图形的处理和显示速度,提高图形的显示质量是电子水平状态指示仪设计的关键所在。基于DSP和各种辅助设备的硬件平台来实现电子飞行仪表显示系统是当前比较主流的方法[2-3],DSP 主要是完成图形的实时生成和处理,辅助设备主要用来完成图形显示的控制和加速[4]。本文打破了传统的通过图形实时生成来进行显示的思路,提出了一种新的设计思路,即基于嵌入式Linux实时系统的电子水平状态指示仪设计方案。

1 总体设计

本软件基于由ARM处理器、LCD显示器、存储器和各种外围接口组成的最小硬件平台。如图1所示,信息处理机处理后的飞参信息通过CAN总线传输到ARM主控芯片,ARM主控芯片将各种飞参信息显示到LCD上。

图1 EHSI硬件结构Fig.1 The structure of EHSI hardware

1.1 软件设计原则

为了使飞行员能准确、直观地获取当前的飞参信息,本软件遵循以下设计原则。

1)信息分级显示原则。根据信息的重要性程度确定优先级,优先级高的信息为自动显示,而优先级较低的信息为选择性显示[5]。这样可以减小信息密度,降低飞行员的压力。

2)视觉最佳原则。优先级高的信息采用醒目的颜色,相关信息采用相同颜色。例如,告警信息采用红色,刻度及相关信息采用白色,罗盘指针及与之对应的导航信息采用绿色。尽量综合显示信息,减少颜色种类,减轻飞行员视觉负担[6]。

3)控制面板最简原则。控制面板的设计既要具有易操作性,又要尽可能的简化,寻求易操作性和最简化的最佳结合。

1.2 软件设计思路

软件的设计思路是根据信息处理机传输来的飞参信息,从图形库中读取并显示相应的图片,这样避免了因图形的实时生成和处理所带来的各种问题。具体思路为:运用“贴图”技术,即通过写Linux实时操作系统[7]下的FB设备实现写内存的技术,来实现图片的显示;采用Linux下进程间通信技术来实现人机交互进程、数据读取进程和屏幕刷新进程三者之间的通信;采用多级缓冲技术克服图片显示过程中遇到的闪烁及走样问题,提高图片显示质量。

1.3 软件消息机制

软件运行是基于消息处理机制的。操作系统负责接受消息,并且对消息进行排队处理,消息处理由系统回调函数中的循环体实现。如图2所示,软件主要处理3类消息:一种是系统初始化信息,用于各种设备的初始化;其二是定时消息,用于驱动数据接收进程和屏幕刷新进程;其三是人机交互消息,用于处理飞行员的各种操作。

图2 EHSI消息机制Fig.2 The message mechanism of EHSI software

2 关键技术分析

2.1 “贴图”技术

“贴图”技术是指通过读写Linux系统下的FB设备来读写显存把图片直接显示在屏上的技术。图片不需要进行实时的生成处理,系统只需要从图形库中直接读取就可以实现仪表的各种显示。FrameBuffer即FB设备是出现在2.2.xx内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。

FrameBuffer中内存块分布如图3所示。Frame-Buffer的显示缓冲区位于Linux核心态地址空间,在Linux中每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的,为此在Linux的文件操作结构中提供mmap函数可将文件的内存映射到用户空间,对于帧缓冲设备则可通过映射操作将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址中,之后用户可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上画图[3]。

图3 内存块分布Fig.3 Memory block distribution

用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即显示在屏幕上。图形库中的图片是使用Adobe Illustrator CS3绘制的BMP格式的图片。

2.2 Linux下进程间通信技术

进程间通信是内核用于协调进程间相互通信的活动。Linux支持一部分进程间的通信(Inter-Process Communication,IPC)机制[4]。信号和管道是两种 IPC机制。

信号机制是Unix系统使用最早的进程间通信机制之一,主要用于向一个或多个进程发异步事件信号,信号可以通过键盘中断触发,也可以由进程访问虚拟内存中不存在的地址这样的错误来产生。信号机制还可以用于shell向它们的子进程发送作业控制命令。Linux使用存贮在每个进程task_struct结构中的信息实现信号机制,它支持的信号数受限于处理器的字长。当前未处理的信号记录在signal域中,并把阻塞信号掩码对应位设置为阻塞状态。但对SIGSTOP和SIGKILL信号来说,所有的信号都被设置为阻塞状态。如果一个被阻塞的信号产生了,将一直保持未处理状态,直到阻塞被取消。

管道是单向的字节流,它可以把一个进程的标准输出与另一个进程的标准输入连接起来。在Linux系统中,管道用两个指向同一个临时性VFS索引节点的文件数据结构来实现。这个临时性的VFS索引节点指向内存中的一个物理页面。表明每个文件数据结构包含指向不同文件操作例程向量的指针。一个例程用于写管道,另一个用于从管道中读数据。Linux必须同步对管道的访问,使读进程和写进程步调一致。Linux使用锁、等待队列和信号量这3种方式来实现同步。

在该系统的设计中,通过信号机制实现人机交互进程与数据读取进程和屏幕刷新进程之间的通信,通过管道机制实现数据读取进程与屏幕刷新进程之间的通信。

2.3 多级缓冲技术

多级缓冲技术,利用在计算机内存中开辟多个图形缓冲区,实现图形的分层,后台处理,避免了前台图形刷新显示时出现的图像闪烁问题,并提高了图形的显示速度[8-10]。

本设计方案中,在内存中开辟3级图形缓冲区,实现图形显示与绘制的分离。实时显示图形时,观察到的是图形操作的结果,而不是图形的绘制过程。这3级图形缓冲区分别为当前显示内存区、将要显示内存区和图片库内存区。当前显示内存区的图片为当前屏幕正在显示的图片,即屏幕显示内存区。将要显示内存区内正在绘制的图片是屏幕将要显示的图片,而图片库内存区存储的是所有的图片,在软件启动时,所有的图片便被读取到该内存区,完成初始化的工作,操作系统根据显示需求把将要显示的图片从该内存区直接拷贝到将要显示图片内存区。当前显示内存区和将要显示内存区的切换是通过一个OFFSET偏离量来完成的。如图4a所示,在软件启动时,先将所有的图片初始化到第三级缓冲区中,此时OFFSET的偏移地址为第一级缓冲区地址,第一级缓冲区为当前显示图片内存区。第二级缓冲区为将要显示图片内存区,如图4b所示,当要显示下一幅图片时,OFFSET的偏移地址为第二级内存地址。通过OFFSET值的不断切换,使得显示内存在第一级内存和第二级内存之间切换。

图4 多级缓冲机制Fig.4 The mechanism of multi-level buffers

与每次显示时从硬盘中读取图片相比,先将所有图片初始化到内存中的方法有很大优势,因为图片在内存之间拷贝比在硬盘和内存之间拷贝要快得多。当前显示内存区和将要显示内存区的开辟很好地解决了图片在显示过程中的闪烁问题。多级缓冲技术的使用提高了图片的显示速度和显示质量。

3 软件运行结果及分析

本软件屏幕显示部分已经成功实现,运行界面如图5所示。

图5 EHSI显示界面Fig.5 The display interface of EHSI

下面对其进行了性能测试。

1)通过在软件中设置计时函数,记录显示界面每刷新一次所用的时间,从而得出每秒显示界面的刷新次数,即帧速率。如图6所示,当复杂度(所贴图层数)为1层时,本软件的帧速率为317.2帧/s,而没有采用多级缓存方法的帧速率为110.5帧/s。随着复杂度的不断增加,帧速率不断下降。当复杂度为6时,本软件的帧速率为61帧/s,而没有采用多级缓存方法的帧速率为21.2帧/s。电子水平状态指示仪的帧速率要求为30帧/s,在复杂度为6的情况下,本软件都能很好地满足设计需求。

图6 帧速率分析Fig.6 The analysis of frame rate

2)在帧速率设定为30帧/s的情况下,对CPU的使用率进行了测试。如图7所示,当复杂度为1时,本软件CPU的使用率为21%,而没有采用多级缓冲技术方法的CPU的使用率为31%。随着复杂度的不断增加,CPU的使用率不断升高。当复杂度为6时,本软件的CPU使用率为58%,而没有采用多级缓冲技术方法的CPU的使用率为100%。因而,在复杂度比较高的情况下,本系统在功能上还有很大的可扩展性。

图7 CPU使用率分析Fig.7 The analysis of CPU utilization rate

另外,本软件在程序上还有很多地方需要进一步优化。优化之后,软件的性能会得到进一步提高。

4 结语

该方案通过采用“贴图”技术和多级缓冲技术设计电子水平状态指示仪,在思路上是一种突破。从对已经完成的屏幕显示部分的测试来看,软件在帧速率和CPU使用率方面均能达到较好效果,该方案能够有效提高电子水平状态指示仪界面的显示速度和质量,此外,开源Linux操作系统的引入大大增强了电子水平状态指示仪的系统可扩展性。

[1]朱耀东,张焕春,经亚枝.一种新型飞机座舱电子水平状态仪的研制[J].航空学报,2003,24(4):360-364.

[2]THOMSEN S V,HANCOCK W R.Extending AMLCD technology into the space shuttle cockpit[C]//SPIE Proceedings,1994,2219:118-129.

[3]RUNYON K R.Application of an advanced graphics processor[C]//SPIE Cockpit Displays,1994,2219:383-387.

[4]胡小龙,周俊明,夏显忠,等.飞机座舱图形显示加速系统设计及FPGA实现[J].中南大学学报:自然科学版,2008,39(5):1042-1048.

[5]张德斌,郭定,马利东,等.战斗机座舱显示的发展需求[J].电光与控制,2004,11(1):54-55.

[6]杨昕欣,张晓林,徐广毅.嵌入式电子飞行仪表系统软件设计[J].航空学报,2005,26(1):74-78.

[7]冼进,许振山,刘峥嵘,等.嵌入式Linux应用开发详解[M].北京:电子工业出版社,2007.

[8]夏宝亮,张宗澄.基于 Framebuffer的应用开发[J].大众科技,2007(10):79-80.

[9]陈莉君.Linux操作系统内核分析[M].北京:人民邮电出版社,2000.

[10]胡还刚,龚晖.多缓冲技术的一种实现方法及其应用[J].计算机应用研究,2003(4):20-21.

猜你喜欢

缓冲区使用率复杂度
2018年中国网络直播用户规模为3.97亿
一种低复杂度的惯性/GNSS矢量深组合方法
基于网络聚类与自适应概率的数据库缓冲区替换*
求图上广探树的时间复杂度
某雷达导51 头中心控制软件圈复杂度分析与改进
基于服务学习方法提高青少年安全带使用率
关键链技术缓冲区的确定方法研究
出口技术复杂度研究回顾与评述
初涉缓冲区
胃肠外科围手术期合理使用抗菌药物的探讨