摘 要:通过对Mesa 3D库的移植及改进在VxWorks中实现了基于OpenGL1的图形API函数,解决了VxWorks下图形驱动开发组件WindML3.0不能使用标准图形API进行图形应用程序开发,不能支持3D图形显示的问题。同时利用硬件双缓冲技术解决了实时显示中画面闪烁、抖动的问题,提高了图形显示的质量

引言

随着嵌入式技术的不断发展,嵌入式系统的功能和结构日趋多样化和复杂化,已不再满足于简单图形的显示,对三维真实感图形的显示以及交互式用户界面提出了更高的要求。VxWorks是由美国风河公司推出的一个嵌入式实时多任务操作系统,当前VxWorks下的图形开发主要使用WindML来完成。虽然WindML支持丰富的显示方式、具有较快的显示速度、开放源代码等优势,但是WindML在以下两个方面的不足也限制了其进一步的发展。

(1) WindML提供的图形API函数根本不能同现有业界标准DirectX或是OpenGL兼容,这在很大程度上影响了代码的可移植性。

(2) WindML现有的图形API函数只支持简单的二维图形显示,根本不支持三维图形,这极大的限制了VxWorks下图形显示的开发,很难满足日益增长的对图形显示方面的要求。因此在WindML3. 0中实现对OpenGLAPI的支持就很有现实意义。

1 VxWorks三维图形引擎的总体架构

图形引擎在操作系统中可以视为一个独立的模块,其实质就是作为显示硬件的驱动程序,为应用程序的编写提供接口函数,同时在该操作系统中协调CPU与显示硬件芯片(GPU)之间的通信以及相应的内存管理等。

从这个意义上说,要在一个操作系统中构建出一个完整的图形引擎至少应该包括以下三大功能模块:与CPU通信模块、图形芯片初始化模块、标准图形库函数模块。与CPU通信模块主要负责提供CPU与GPU之间通信总线的驱动程序。以PCI总线为例,这个模块必须实现查找PCI设备、读写PCI配置空间,以及实现PCI中断控制等功能,协助CPU完成内存映射的任务。图形芯片初始化模块负责初始化图形芯片,包括创建并向系统注册显示设备、完成内存映射、正确设置显示模式、销毁设备等,这个模块必须使GPU处于准备好的状态,随时接收并完成绘制图形的任务。标准图形库函数模块负责在底层硬件上实现符合业界标准的图形库API函数(比如OpenGL或是DirectX) 。

2 Mesa3D的移植及改进

2.1 Mesa3D的移植

Mesa3D是一个兼容OpenGL规范的开放源码的函数库,是目前Linux上提供专业三维图形支持的惟一选择。Mesa3D同时也是一个跨平台的函数库,能够运行在XWindow、XWindow with DGA、BeOS、Linux SVGALib等平台上。从编译原理上来说,Mesa3D的移植就是要将Mesa的源代码(.c文件)编译成模块文件(.o文件) ,使其能成为一个功能模块加入到最终的VxWorks镜像中。

但是Mesa3D并不是专门为VxWorks编写的,因此必须从源代码中选取那些实现OpenGL基本功能的源文件, 同时还应根据系统硬件配置实现Mesa3D库与WindML的接口。最后将所有的文件单独编译生成相应的模块,再链接进入VxWorks镜像文件中。根据笔者的实践,要将Mesa3D移植到WindML3.0并能实现所有的OpenGL API函数,以下文件是必须要加入工程,并且需要根据系统的硬件情况进行修改,具体的修改处理情况如下。

(1) 所有实现OpenGL标准功能的文件。在Mesa3D中,OpenGL按照功能分成以下部分:

1 介绍

  WindML即Wind Media Library(媒体库),它支持多媒体程序运行于嵌入式操作系统,风河公司设计它主要是用来提供基本的图形、视频和声频技术以及提供一个设计标准设备驱动程序框架。

  WindML API库提供了一个统一的图形硬件接口以及处理输入设备和输入设备事件的能力。

  WindML有以下几个设计目的:

  • 简单。WindML提供一个灵活的图形源语集、基本的视频和声频功能;
  • 硬件便宜。可以在多种CPU体系结构上使用;
  • 操作系统便宜。可以在多种RTOS系统上使用;

驱动程序开发的容易。提供给开发者一个定制设备驱动程序的机理。

2 WindML结构

  WindML包括两个组件――软件开发包(SDK)和驱动程序开发包(DDK)。

  SDK组件用来开发应用程序,它提供了一个全面的API集,包括图形、输入处理、多媒体、字体和内存管理。

  DDK组件是用来实现驱动程序的,它提供了一个完整的驱动程序参考集,包括硬件配置和API集,以使得开发者能够迅速的引导和使用自己的驱动程序。

  WindML可以概括为如图1所示的结构:

VxWorks WindML

3 UGL图形接口(UGI) API

奥索科技公司 董磊 周金明 杨磊

摘 要 论述VxWorks上WindML对多字节码的显示支持,着重论述其存储结构和意义,并给出汉字显示的实现方法。

关键词 VxWorks操作系统 WindML组件 汉字点阵 国标编码

一. VxWorks操作系统图形显示方案

VxWorks作为嵌入式实时操作系统的龙头老大,在国内应用已非常广泛,其中包括工业控制、医疗设备、家庭视听、车载电子等许多需要本地显示的行业。作为国内的显示应用,汉字显示是必不可少的,而vxWorks原厂商没有直接提供完备的汉字显示解决方案,本文就这个热点论题,通过对VxWorks显示组件的分析,具体给出一种汉字显示的方案。

VxWorks的汉字显示首先需要一种图形解决方案,只有工作在图形模式下才可能显示汉字。vxWorks有三种显示的方案可供选择:

1. WindML + Zinc:

WindML是wind river mutli-media library 的简称,其中包含UGL(universal graphics library)。该组件直接控制显示硬件,主要提供显示模式设置、标准输入输出控制、点线面作图等函数,编程接口很类似于Torbo C,Borland C里的图形库。Zinc基于WindML,提供了类Windows风格的接口,有各种控件被封装于内,编程接口很类似于windows编程。

2.WindML + Jworks:

Jworks 提供Java的支持,在VxWorks上启动Java 虚拟机来解释Java语言,图形开发编程接口是Java语言,Java虚拟机的图形实现基于WindML。

3.web server + WindML + Jworks + browser:

web server 使显示编程接口成为编写网页,可以通过远程的browser来访问而使设备具有远程显示接口,也可以在本机做browser使设备具有本机显示接口,该browser的实现需要WindML或Jworks的支持。

上述方案内,纯web server的方案不需要本地汉字显示,只要在网页上放国标码或unicode码等,由远程的browser去实现显示;其它方案基本上都需要WindML的支持,这是因为VxWorks系统里所有底层的显示操作都是通过WindML实现。

二.汉字显示方案

摘 要:较全面地介绍了用WindML2.0实现嵌入式实时操作系统VxWorks的显控程序设计,并给出了在WindML2.0中显示中文的办法。

关键词: 嵌入式实时操作系统,VxWorks,显控程序,WindML

1 引言

VxWorks是美国WindRiver公司(位于美国加州的Alameda市)开发的,具有工业领导地位的高性能嵌入式实时操作系统。VxWorks具有专门为实时嵌入式系统设计开发的操作系统内核,提供了高效的实时多任务调度、中断管理,实时的系统资源以及实时的任务间通信。基于VxWorks操作系统的应用程序可以在不同的CPU平台上轻松植。VxWorks只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。VxWorks以其卓越的性能被广泛地应用在通信、军事、航空、航天等实时性要求极高因而普通操作系统难以胜任的领域中,美国的F-16战斗机、B-2隐形轰炸机和爱国者导弹及火星控测器“探路者”上都使用了VxWorks。

在VxWorks的一般嵌入式应用中,可以选择Zinc For VxWorks或WindML(Wind Media Library)2.0来进行图形界面设计,它们都是VxWorks中的可裁减的多媒体组件,都可以在VxWorks操作系统上以较低的系统开销实现丰富多彩的图形界面。Zinc是一套完善的图形用户界面开发工具,适用于为高性能嵌入式设备开发低内存开销、本地编译的图形化用户接口。WindML是将 Zinc和硬件设备之间连接在一起的简捷高效的通用多媒体图形库。WindML主要提供了对芯片、输入/输出设备、音频/视频、帧缓冲器等的开放的应用程序接口(API)。因此,Zinc必须通过调用多媒体图形库WindML的应用程序接口来实现其图形功能。Zinc属于高端应用,Zine组件的价格也较贵,而WindML在大多数情况下已经足可以满足应用需求了。而且,WindML编程也比较灵活,有更大的自由度。因此,一般是选用WindML来作图形界面设计。

一个系统中的各个软件模块往往都要和界面产生一定的联系,有的模块需要反数据送到界面进行显示,界面程序有可能还要将数据处理后转送其它模块以实现模块间的通讯,还有可能根据数据的情况或键盘等的输入启动某些程序,例如,按键启动系统自检等。因此,在WindML的许多应用场合,兴驻要求WindML完成图形界面的显示,而且还要完成一定的控制功能。WindML常常被用来编写VxWorks下的显示控程序。

2 WindML的功能

WindML本身也具有可裁剪性和可配置性,以适应不同的应用要求。WindML可以为在VxWorks操作系统下开发的软件提供基本图形、视频和音频文面的操作。WindML适用于很多种CPU,可以提供独立于硬件的代码,同时它也支持鼠标、键盘等输入设备。

WindML的主要功能有二维图形API,事件服务,区域和窗口管理,多媒体,资源管理。其中,二维图形API是最常用的部分,包括基本画图操作(画线、矩形、椭图、多边形、点),选择字体输出文体,位图,光标管理,批量画图操作,图形上下文,色彩管理,双缓冲。事件服务程序是用来处理输入设备的输入请求的。它会把键盘、鼠标等输入的数据转化为事件并且传送给事件句柄,送到应用队列中。区域和窗口管理可以在界面上定义一个区域或多线程之间共享的窗口以供画图操作。多媒体API支持NTSC,PAL,SECAM等视频制式,DSP或混频器两种设备的音频输出,也支持JPEG图形格式。资源管理是指资源的建立、控制和删除。这些资源是指常规的WindML资源(例如设备和事件队列),内存管理,驱动器注册等。

3 WindML的使用

内容摘要:VxWorks5.5 采用点阵字库实现字体显示,这种字库设计简洁,应用广泛,但一个字库只能对应一种字体的一种大小,在不确定使用何种字体的情况下,这种传统的字体显示方式便不能够满足需求。通过使用TrueType字库和FreeType 字体引擎相结合的方式,能实现多种字体、任意大小的显示功能。主要介绍了TrueType、FreeType技术的基本原理,以及在VxWorks5.5 下如何将WindML、FreeType 和TrueType 三者相结合实现矢量字体显示的方法。

1 VxWorks5.5点阵字库的局限性

VxWorks5.5 是美国风河公司开发的嵌入式操作系统,图形系统采用WindML3.0,支持点阵字显示,不支持矢量字体显示。点阵字采用内存模式加载,使用前需要将字体库先加载到内存,再通过WindML 图形接口实现点阵字显示。点阵字库采用。c 文件方式储存信息,每个字信息都包含在一个数据结构中,其中包含了字体的所有点信息,字体显示时只要根据字的宽高将点信息直接送入显存显示。这种方式的字体实现简单、显示速度快,但是一个字体文件只包含一种字体、一个大小的信息,使用具有一定的局限性。

随着嵌入式软件的不断发展,在设计象嵌入式浏览器这样的人机界面的软件时,发现点阵字库已经远远不能满足设计要求,嵌入式浏览器对字体的需求是根据网页内容来决定的,在网页上任何类型,任何大小的字体都可能出现,点阵字库要将所有字体类型,每种字体的所有大小都包括是不可能的,这种局限性大大降低了浏览器的显示效果。TrueType 字库引入到VxWorks5.5 系统下,有效的解决了字体的问题,所有Windows 下的TrueType 字库都可以在VxWorks5.5 系统直接使用,资源非常丰富,能满足嵌入式系统对字库的新需求。

2 TrueType字库原理及FreeType字体引擎

TrueType 是Apple 公司和MICroSOFt 公司合作开发的页面描述语言(简称TTF),采用了直线和二次贝赛尔曲线来描述字符的轮廓,结合了光栅技术和矢量技术的优点,克服了以往所有点阵字体、矢量字体和向量轮廓字体的缺点,字体可以任意放大、缩小、旋转和变形而不会影响输出质量,提供了真正的设备无关性,二次贝赛尔曲线既能保证轮廓曲线的光滑性,又有利于提高字形还原的速度。如下图1 所示。

VxWorks WindML Truetype

图1 TrueType 字体轮廓图

FreeType 是一个完全免费的、高品质的可移植的字体引擎,它提供同一的接口访问多种字体格式,包括TrueType,openType,CID,CFF 等。支持单色位图,反走样位图的渲染,FreeType 库是高度模块化的程序库,它使用ANSI C 开发,但采用面向对象的思想,FreeType 用户可以灵活地对它进行裁剪。

3 VxWorks5.5下矢量字库的实现