军事指挥系统中VxWorks下汉字显示技术
扫描二维码
随时随地手机看文章
由于对实时性和可靠性的要求,现代军事指挥系统越来越广泛地采用嵌入式实时操作系统VxWorks。WindRiver公司的媒体库windML (Wind Media Li-brary)提供了基于VxWorks的图形解决方案,其UGL组件提供了显示模式设置、标准输入/输出控制和点、线、面作图等函数,但没有直接提供完备的汉字显示解决方案,不支持汉字显示。针对实际指挥系统中人机交互界面的需求,全西文的的交互方式显然不便于文件的传输和信息的交换。本文通过对汉字编码和windML显示机制的分析,给出了VxWorks嵌入式平台下汉字显示的实施方案。
1 VxWorks在军事指挥系统中的应用
所谓嵌入式系统,是指内置到火控、战车、飞机、导弹以及卫星和舰船导航等各类武器系统和作战平台上的计算机系统。随着信息技术的迅猛发展,尤其是计算机技术和微电子技术的快速发展,嵌入式系统在军事上得到了广泛应用。嵌入式计算机系统,最早出现在20世纪60年代武器控制中,后来用于军事指挥控制和通信系统,所以军事国防历来就是嵌入式系统的一个重要应用领域。现在,各种武器控制(火炮控制、导弹控制、智能炸弹制导引爆装置)、坦克、舰艇、轰炸机等,以及陆海空各种军用电子装备、现代化的军事指挥系统等都可以看到嵌入式系统的影子。
在实时嵌入式操作系统中,VxWorks以其高可靠性和高实时性得到了广泛的应用。VxWorks是美国Wind River System公司(风河公司,简称WRS公司)推出的一个实时操作系统。VxWorks是一个运行在目标机上的高性能、可裁剪的嵌入式实时操作系统,具有专门为实时嵌入式系统设计开发的操作系统内核,它包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几部分。
VxWorks在军事指挥系统中应用时,由于指挥系统对人机交互能力的要求较高,需要对武器参数、操作进程以及作战指令等战场信息进行显示,因此迫切需要完成VxWorks下的中文显示开发。军事指挥系统中所显示战场信息如图1所示。
2.1 WindML基本功能
WindML是由WindRiver公司提供的媒体库,其UGL组件提供了显示模式设置、标准输入/输出控制和点、线、面作图等函数,以及对芯片、输入/输出设备、音频/视频、帧缓冲器等开放的应用程序接口。
WindML的主要功能有二维图形API、事件服务、区域和视窗管理、多媒体API和资源管理。其中,二维图形API是最常用的部分,包括基本绘图操作 (如画线、矩形、椭圆、多边形、点等),选择字体输出文本、位图管理、光标管理、批量绘图操作、图形上下文、色彩管理和双缓冲等。事件服务程序用来处理输入设备的输入请求。它会把键盘、鼠标等输入数据转化为事件并加入应用队列;区域和视窗管理可以在界面上定义一个区域或多线程之间共享的窗口,以进行绘图操作;多媒体APl支持NTSC,PAL,SECAM等视频制式下DSP或混频器两种设备的音频输出,也支持JPEG图形格式;资源管理器是指常规的 WindML资源(例如设备和事件队列)、内存管理和驱动器注册等资源的建立、控制和删除。
2.2 WindML字体驱动体系结构
WindML字体驱动在WindML 2D API上提供了一个通用的抽象层,允许应用程序通过一个通用2D字体API库使用不同的字体引擎。通用2D字体API是提供给应用程序使用字体API的公共接口。字体驱动不同于VxWorks中的其他驱动,它不允许执行或使用任何图形驱动接口以下的程序,也就是说它不直接访问硬件,只访问系统所使用的图形驱动或间接通过UGL图形驱动结构来访问硬件。这就允许字体驱动可以运行在任何图形驱动之上,与字体引擎硬件无关。WindML字体驱动体系结构如图2所示。
2.3 点阵汉字输出过程
点阵汉字的显示是利用WindML的图形输出功能来实现的。设计开发中利用WindML对位图字符显示和双字节编码的支持,按照WindML位图字体文件的格式完成汉字点阵的转换存储,并使用WindML的双字节显示函数实现点阵获取、点阵显示,将汉字显示出来。
WindML有很多字库文件,原始安装状态下都是西文字库文件,要在VxWorks系统中显示中文汉字,解决方案是将西文字库文件修改成为中文字库文件,即设计一种类似西文字库格式的C语言文件,文件中存储双字节的汉字编码、点阵信息及字体的控制信息等。字库文件经过系统配置、编译后生成点阵字库文件目标代码,点阵驱动程序从目标代码中获取点阵信息传递给应用程序编程接口,应用程序调用图形显示函数输出汉字。WindML下汉字显示处理过程如图3所示。
2.4 点阵汉字存储结构
国家标准对汉字库结构做了统一规定:字库分为94个区,每个区有94个汉字,每个汉字有确定的区和位编码,用两个字节表示,第一个字节表示汉字所在的区号,第二个字节表示位号,即所谓的区位码。每个汉字在字库中以点阵字模形式存储,一般采用16×16点阵、24×24点阵,每个点用二进制位(0或1)表示,对应在屏幕上显示出来就是相应的汉字。每个汉字都有惟一的区位码,通过区位码计算出汉字在字库中的位置,从而确定汉字的字模。
点阵汉字字库C语言文件有固定的结构,分为三个部分:点阵属性表、点阵信息描述总表和点阵信息表。点阵属性表用来描述点阵汉字的字符结构和字模结构参数的结构体,包含参数有像素大小、字符名称、字符家族名称等,特别定义了指向点阵信息总表的数组指针,字体驱动程序利用这个指针寻找点阵信息总表。点阵信息描述总表 它是一个存放指向点阵信息表指针的动态数组,其元素个数取决于汉字点阵信息表的个数。
点阵信息表点阵信息表以数组的形式表示,主要用来存储汉字的GB2312码(西文是ASCII码)和详细点阵信息。可以是一个表也可以是若干个表。把汉字按 GB2312编码的页分类,构建多个汉字分表,也可以把中西文装在混合表里做成一个大表,西文字符被扩展成双字节存储。
3 点阵汉字字库实例
自己开发点阵存储、点阵获取、点阵显示,改造windML的双字节或单字节显示函数,使其能判断汉字码,一旦判断出汉字码,则使用自己开发的点阵获取、点阵显示等把汉字显示出来。该方法对点阵的操作更加灵活,适合非标准的点阵算法,或者当开发者已有成熟的点阵操作方法时,把该方法绑接到WindML上。
不必理会WindML双字节编码机制,这里需要的是一个汉字的点阵字库,这个点阵字库不必按照WindML的双字节编码机制进行编码,里面所存储的只是汉字的点阵信息和区位码信息,这个字库可以通过从Windows中导出;由于不选用WindML的双字节编码机制,所以对于VxWorks中关于如何控制打点以及显示点阵字体驱动,并不需要具体了解;更重要的是拥有更大的灵活性,只需把自己所写的汉字显示函数绑定到WindML上面即可。因此这里必须要求自己写点阵的存储、点阵显示、汉字显示函数。做起来比较简单,只要求了解汉字编码的基本知识,即汉字双字节编码中,高、低字节的最高位都是为‘1’,而西文字符编码中最高位为‘0’,利用这点来判断所要显示的字符是汉字还是英文。
在设计开发过程中,在现有的西文字库的基础上进行修改,添加相应的字体参数和汉字的点阵信息,形成点阵汉字字库文件uflhz12.c,uflhz16.c,uflhz24.c,以分别存储12,16和24号宋体的字库信息。这个过程用Windows编程来实现。
以下是16号宋体字库文件中的点阵信息表:
字库文件的最后定义了点阵属性表,该表规定了整个点阵字库的属性以及字模和间距,并定义点阵指针。
4 结 语
在VxWorks嵌入式平台下采用点阵汉字显示技术,使得战场信息、态势、指令等获得了中文显示。最终使设计开发的军事指挥系统不仅具有良好的可靠性和卓越的实时性,同时具有直观而方便的中文平台以及友好的交互能力,大大提升了整体作战效能。