1、题(中、英文)目 基于 OpenGL的 VxWorks图形用户界面开发Research On Graphical User Interface of VxWorksBased on OpenGL作者姓名 软件工程提交论文日期 代号分类号学号密级UDC 编号学校指导教师姓名职称工程领域 企业指导教师姓名职称摘要图形用户界面(GUI)是人机交互技术的重要内容,它使用图形图像信息、直观的表达方式与用户交互,使软件系统的人机界面简洁、美观、方便好用,更加人性化。目前 GUI 已经大量应用在嵌入式领域,但是大多数嵌入式 GUI 系统提供给用户的显示平面从逻辑设计上讲是二维的,最大的缺点在于反映信息量小,
2、在对真实场景进行模拟显示的时候,无法提供真实的场景数据。随着嵌入式系统硬件功能的不断提高,如何开发一款支持 3D 建模的嵌入式 GUI 已成为一个迫切的话题。本课题来源于实习工作中的“某星载仪表控制计算机” 项目,该计算机采用VxWorks 作为其操作系统,要求设计出人性化的人机界面,可以实时显示系统的相关参数数据、图形信息等,并提供对 3D 模块的支持,能够进行 3D 图形的绘制和显示。本文经过详细分析和设计,实现了将 OpenGL/Mesa3D 图形库移植到VxWorks 系统,并结合 VxWorks 内核及其多媒体库 WindML 的相关接口,开发了以消息驱动为核心、具有基本窗口管理功能
3、和仿 Windows 控件效果、支持中文界面和 3D 画面绘制显示的 GUI 系统。从工程应用和测试的效果来看,该 GUI 系统基本实现了预期功能。关键词:嵌入式系统 VxWorks 图形用户界面 OpenGL/Mesa WindMLAbstractAs an important branch of the HMI(Human-Machine Interface), GUI(Graphical User Interface)provides rich graphics modes for exchanging information with users in graphical and in
4、tuitionistic ways. GUI makes software convenient and humanistic, and has been applied in embedded fields prevalently. Most of traditional embedded GUI systems only provide 2D drawing control. It means that the show planes which are available to users are two-dimensional in logic. In the simulation o
5、f showing the real scene, the major drawback of this system is that information which is reflected is so little that can not provide true data. With the improvement of embedded systemshardwares, it has become an urgent topic how to develop an embedded GUI which supports 3D modeling. This issus origi
6、nates from the project named “Space Instrument Control Computer“ and this computer uses VxWorks as its operating system, which request the UI is humanistic and could demonstrate the systems related parameter data, graphic and other information in real-time, and it also has the 3D graphical function,
7、 which can be used to display and render the 3d graphics. With deeply analysis and design, this thesis finally make the OpenGL/Mesa3D library portable for the VxWorks system, and by using the WindML library containted inVxWorks System, I developed a Message-Driven oriented GUI System, whose style is
8、 windows liked and Chinese character supported. Moreover it can be used as a 3D display and rendering system. Regarding the test effect of the application, this GUI system has basically realized the anticipated function.Keyword: Embedded System VxWorks GUI OpenGL/Mesa WindML目录 I目录第一章 绪论 .11.1 背景知识介绍
9、 .11.1.1 嵌入式实时系统 .11.1.2 图形用户界面概述 .21.2 国内外研究现状 .41.2.1 嵌入式 GUI 的现状 41.2.2 基于 VxWorks 的图形解决方案 51.2.3 嵌入式 GUI 的发展趋势 71.3 课题来源和意义 .71.4 论文结构 .8第二章 VxWorks 操作系统及媒体库 WindML.112.1 VxWorks 深入研究 .112.1.1 VxWorks 概述 10 112.1.2 VxWorks 实时微内核 1112122.2 VxWorks 集成开发环境 Tornado152.2.1 Tornado 介绍 1314152.2.2 交叉编译
10、环境 .152.2.3 Tornado 的组成 .162.3 WindML 媒体库 .182.3.1 WindML 概述 16.182.3.2 WindML 事件服务机制 .192.3.3 WindML2D 图形库分析 192.3.4 WindML 程序开发流程 .212.4 本章小结 .22第三章 OpenGL/Mesa 及其在 VxWorks 下的移植 .233.1 OpenGL/Mesa .233.1.1 OpenGL 开发库 233.1.2 OpenGL 开发库结构 243.1.3 Mesa 库 .283.2 OpenGL/Mesa 库的移植 293.2.1 工作概述 .29II 基于
11、 OpenGL 的 VxWorks 图形用户界面开发3.2.2 重要数据结构和函数的引入 .293.2.3 使用改进后的库 .313.2.4 编译 Mesa 库 323.3 搭建虚拟开发环境 .333.4 本章小结 .35第四章 VxWorks 系统 GUI 关键技术及实现 .374.1 消息驱动机制 .374.1.1 消息驱动机制实现原理 .374.1.2 消息检测任务 .384.1.3 事件分发任务 .384.2 中文显示方案 .394.2.1 中文显示的基本原理 .394.2.2 字库文件格式 .404.2.3 具体的实现方案 .424.3 窗体管理 .444.3.1 主窗口 .444.
12、3.2 对话框 .454.3.3 控件 .464.3.4 菜单 .464.4 常用控件设计 .474.5 本章小结 .50第五章 工程应用和效果测试 .515.1 工程应用 .515.2 测试效果 .515.2.1 普通图形界面 .515.2.2 3D 图形显示 .525.3 本章小结 .53结束语 .55致谢 .57参考文献 .59第一章 绪论 1第一章 绪论1.1 背景知识介绍1.1.1 嵌入式实时系统在计算机技术和信息技术高速发展的今天,很多计算机已经脱离了大型机和PC 的概念,广泛应用的嵌入式计算机便是其中之一。嵌入式计算机或者叫嵌入式系统,源于 20 世纪 60 年代,其定义为 1:
13、以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的,用来完成一种或多种特定功能的专用计算机系统。其具有软件代码小,高度自动化,响应速度快,是软硬件的紧密结合体等特点。当前嵌入式系统呈现出巨大的市场需求,小到照相机、电冰箱、移动电话,大到舰船、汽车、卫星和火箭,涵盖了工业控制、武器系统、航空航天、消费电子等领域。工业控制、武器系统、航空航天等领域的多数嵌入式系统有一个共同的特性:对系统的响应时间有严格要求,这些系统也被称为实时系统。所谓实时,也就是“立即” “及时”的意思。在实时控制系统中,计算机通过特定的外围设备与被控对象发生联系,并对外
14、来事件在限定的时间内做出反应。所以,其结果的正确性不仅与计算或控制的逻辑正确性有关,还与其时间特性有关。嵌入式实时操作系统(Embedded Real Time,RTOS )是实时系统的核心软件,它嵌入在目标代码中,系统复位后首先执行,它负责在硬件基础之上,为应用软件建立一个功能更为强大的运行环境,用户的其他应用程序都建立在 RTOS 之上,从这个意义上而言,可以认为 RTOS 是一个虚拟机,它比底层硬件更容易编程。RTOS 最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理、信号量管理等,这些管理功能是通过内核服务
15、函数形式交给用户调用的,也就是API。RTOS 根据各个任务的优先级,合理地在不同任务之间分配 CPU 时间,从这个意义上而言,操作系统的作用是资源管理器。RTOS 的引入,解决了嵌入式软件开发标准化的难题。随着嵌入式系统中软件比重不断上升、应用程序越来越大,对开发人员、应用程序接口、程序档案的组织管理成为一个大的课题,引入 RTOS 相当于引入了一种新的管理模式。基于RTOS 开发出的程序,具有较高的可移植性,实现 90以上的设备独立,一些成熟的通用程序可以作为专家库函数产品推向社会。目前国内外主要的 RTOS 有:美国风河公司的 VxWorks,微软的2 基于 OpenGL 的 VxWor
16、ks 图形用户界面开发WinCE,3COM 公司的 Palm OS 和嵌入式 Linux。这些嵌入式操作系统各有各的特点。1) VxWorksVxWorks 是美国 Wind River System 公司(WRS) 推出的一个实时操作系统。VxWorks 是专门为嵌入式而定制的,实时性非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效。VxWorks 的内核及一些系统模块可以根据需要进行定制,内核最小仅 8KB,且不失其实时、多任务的系统特征。随着近年来 VxWorks 操作系统开发环境的完善,提供了更加友善的开发界面和更加强大的模拟环境,并且改善了图形产品
17、开发中存在的不足,使VxWorks 成为嵌入式系统中比较成熟和完善的产品。2)WindowsCEMicrosoft 公司的 WinCE 是从 Windows 95 发展而来,提供给开发人员一个熟悉的开发环境,但是在内核结构的设计中并未考虑适应系统的高度可裁减性的要求,需要较大存储空间,应用程序也比较庞大,且在实时性方面较 VxWorks 略逊一筹。3)嵌入式 Linux嵌入式 Linux 具有开放的源代码的优点,但是它的开放代码有很多都没有经过一个严格的测试,直接使用开放代码的 BSP(Board Support Packet)会带来不稳定的问题。它和 WinCE 一样都是从桌面操作系统演变而
18、成,不像 VxWorks 是专门为嵌入式而定制的,程序执行效率也没有 VxWorks 的高。4)Palm OSPalm OS 是由 3COM 公司开发的一种嵌入式操作系统,一般只用于 PDA。1.1.2 图形用户界面概述图形用户界面(Graphic User Interface),简称为 GUI,是一个软件系统的图形化的前端,使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,接收用户的输入或其它系统的输入,产生图形输出,帮助用户和计算机之间进行交互。GUI 的广泛流行是当今计算机技术的重大成就之一,其最重要的优势在于使用户摆脱了在命令行提示符下与操作系统进行交互的方式,用户可以仅仅通过鼠标
19、点击来快速的熟悉程序的操作,而且由于图标、对话框的引入,使得操作更为直观、形象,这些直接给人们的生活方式带来了变革,为数字化普及做出了巨大的贡献。GUI 工程是一种结合计算机科学、美学、心理学、语言学、行为学,及各商业领域需求分析的人机系统工程,强调将人、机器、环境三者作为一个系统而进第一章 绪论 3行的总体设计,它充分利用硬件资源,通过合理的屏幕布局及颜色搭配,可提供清晰、直观、友好的人机界面,是连接计算机和操作者的桥梁。随着计算机软、硬件技术的不断发展,人机界面的设计已成为软件设计的重点。在软件的开发过程中,人机界面的工作量约占整个软件开发工作量的 40%60%,人机界面的优劣直接关系到软
20、件的成功和生存。这种面向客户的系统工程设计将更好的优化产品的性能,使操作更人性化,减轻使用者的认知负担,使其更适合用户的操作需求,直接提升产品的市场竞争力。GUI 是计算机与其使用者之间的对话接口,是计算机系统的重组成部分,它基于硬件和操作系统之上,为用户提供丰富的图形编程接口,使其能够方便快速的编制界面友好的应用程序。虽然不同的 GUI 系统因为其使用场合或服务目的的不同,具体实现互有差异,但是总结起来,一般在逻辑上可以分为三个基本的层次 2:用户模型、窗口模型和显示模型。如图 1.1 所示。桌面管理系统用户模型窗口模型显示模型操作系统硬件平台图 1.1 图形用户界面系统的层次结构在图 1.
21、1 的框架结构中,位于最底层的是计算机硬件平台。和这些硬件密切相关的就是驱动程序,它完成诸如:初始化硬件设备,设定设备运行参数;读外部设备的数据和对设备中断的响应等。在硬件平台的上面是计算机的操作系统。大多数 GUI 都只能在一两种操作系统上运行,只有少数产品例外。操作系统之上的是显示模型,它决定了图形在屏幕上的基本显示方式,即用位映射图形显示各种图形对象的方式。不同的图形用户界面系统所采用的显示模型各不相同。例如大多数在 UNIX 之上运行的图形用户界面系统都采用 X 窗口作显示模型;MS-Windows 则采用自己设计的图形设备接口(GDI)作显示模型。显示模型之上的是窗口模型,它确定了窗
22、口如何在屏幕上显示和窗口的层次关系,例如菜单、对话框等。它通常包括两部分:一是编程工具,如函数集;二是对如何移动、输出和读取屏幕显示信息的说明。窗口模型之上的是用户模型,它主要包含了显示和交互特征,由此图形用户界面这一术语有时也特指用户模型。另外,用户模型也定义为图形用户界面的外GUI4 基于 OpenGL 的 VxWorks 图形用户界面开发观与视觉。它主要包括两部分:一是构造用户界面的工具,如工具箱和框架集,包括对高层界面构件对象的数据结构的定义和说明;二是定义在屏幕上组织各种图形对象以及这些对象之间的行为规范和协议,即每个 GUI 用户模型都应当说明它支持什么样的窗口和什么样的显示方式,
23、因为定义规范和建立工具集都必须针对具体的显示模型和窗口模型。最上层的是桌面管理系统,它是在图形用户界面基础之上开发的应用程序,实现人机交互的图形化管理。它通常包括以下几个组成部分:图形化的文件管理系统、供用户使用的图标库、桌面管理机构、图标库管理机构等。1.2 国内外研究现状1.2.1 嵌入式 GUI 的现状随着嵌入式技术的发展,嵌入式硬件平台、操作系统、开发工具、以及应用开发组件等很多方面都取得了较大突破,嵌入式 GUI 系统也得到了发展,涌现出了一大批嵌入式 GUI 系统或者组件。目前终端系统己经开始广泛采用 32 位处理器芯片,配置触摸屏(或鼠标) 、键盘等多种输入设备和 LCD 等图象
24、显示设备,这为 GUI 在嵌入式系统上应用提供了基础硬件平台。目前 GUI 的实现方法各有不同,分别有以下几种方式 3:1)某些大型厂商有能力自己开发满足自身需要的 GUI 系统。如 VxWorks 集成的 UGL,ZAL 等;2)某些厂商没有将 GUI 作为一个软件层从应用程序中剥离,GUI 的支持逻辑由应用程序自己负责。3)采用某些比较成熟的 GUI 系统,比如 MiniGUI、MicroWindows 或者其他GUI 系统。在上述手段中,第 2 种方法是一种临时解决方案。利用这种手段编写的程序,无法将显示逻辑和数据处理逻辑划分开来,从而导致程序结构不好,不便于调试,并导致大量的代码重复。
25、一般认为 GUI 是一种类似于操作系统的基础软件,这种软件系统应该遵循一定的标准,并且应该是开放源码的自由软件,从而可以使开发商集中精力开发自己的应用程序。下面是对一些成熟 GUI 方案的概述:1)紧缩的 X Window 系统 4由麻省理工学院推出的 X Window 系统是类 UNIX 系统的标准GUI。XWindow 系统采用标准的客户/服务器体系结构,具有可扩展性、可移植性等优点,但该系统的庞大、累赘和低效率也是大家所共知的。为了获得应用程第一章 绪论 5序的可移植性,许多厂家都试图通过对 X Window 系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为 800K
26、 的 X 服务器,基本能够满足嵌入式系统的需求。缺点:该系统的源代码尚不开放,从而很难进行本地化开发。2)MiniGUI5MiniGUI 的主要特色有: 提供了完备的多窗口机制。这包括:多个单独线程中运行的多窗口、单个线程中主窗口的附属、对话框和预定义的控间类(按钮、单行和多行编辑框、列表、进度条、工具栏等)。 消息传递机制。 多字符集和多字体支持,目前支持 ISO8859-l, GB2312,Big5 等字符集并且支持各种光栅字体和 TrueType,Typel 等矢量字体。 全拼、五笔等汉字输入法支持。 BMP,GIF,JPEG,PCX 等常见图像文件的支持。 小巧。包括全部功能的库文件大
27、小为 300K 左右。 可配置。可根据项目需求进行定制配置和编译。 高稳定性和高性能。MiniGUI 己经在 Linux 发行版安装程序、 CNC 系统、蓝点嵌入式系统等关键应用程序中得到了实际的应用。 可移植性好。目前,MiniGUI 可以在 XWindows 和 Linux 控制台上运行。缺点:图形功能不全,应用设计比较困难。1.2.2 基于 VxWorks 的图形解决方案当前,VxWorks 以其良好的可靠性和卓越的实时性被广泛应用于军事、航空、航天、通信等高精尖技术及实时性要求极高的领域中。随着硬件技术的不断发展,硬件资源不再是一个制约的问题,同时为了提高系统的易用性,要求我们能够开发
28、出良好的图形界面。比较普遍使用的有以下几种 678:1)VxWorks 上的媒体库组件 WindMLWindML 是由 Wind River 公司提供的媒体库,其中包含的 UGL 组件提供了显示模式设置、标准输入输出和点线面作图等函数,是 VxWorks 的 GUI 基础。但用 WindML 开发图形界面效率较低,且显示效果较差,图像中的动画、三维、反走样等问题难以解决,不适宜开发高性能界面。2)WindML 与 Zinc 结合Zinc 基于 WindML,提供了类似于 Windows 风格的控件。将两者结合,使用6 基于 OpenGL 的 VxWorks 图形用户界面开发Zinc 实现用户界
29、面,使用 UGL 库函数图画实现图形文字显示。不幸的是 Zinc 本身存在很多 BUG,并且搭建 Zinc 开发环境需要给 WindML 和 Tornado 打补丁,对网卡也有一定要求,所以该方案已经不再是 VxWorks 上图形界面开发的最佳选择。3)X Window 与 OSF/Motif 结合X Window 不依赖于特定硬件系统的图形和文字显示系统。X 系统包含的Xlib 库提供了建立窗口、画图、处理用户操作事件等基本功能,以 Xlib 库为基础又开发了 Xt 库。Motif 是基于 Xlib 库和 Xt 库建立的更高层次的工具包,提供了交互的图形组件库,其中包括建立各种窗口组件的便利
30、函数。4)WindML 与 Tilcon 结合Tilcon 是目前最先进的实时操作系统图形开发工具,同步支持最新版本的Tornado/VxWorks 以及 WindML 多媒体库。Tilcon 采用了最先进的图形技术,具有极高的可靠性和可维护性,还支持 OPC,XML ,SOAP 等标准工业协议,已成功应用在医疗仪器,军用武器,工业流水线,航空/ 航天等领域。在资金充足的情况下,选择 WindMLTilcon 方案是最为稳定可靠的选择。5)OpenGL 图形开发包在 VxWorks 系统下开发 3D 图形显示,多数的采用的办法都是基于 OpenGL的软件开发包。各大显卡厂商,在其专业级别的显卡
31、产品上附带了 OpenGL 开发包,甚至出品了自己成套的 OpenGL 图形显示解决方案,如 ALT 的 GT3D Embedded Graphics Solution,这也成为目前在 VxWorks 下开发 2D/3D 图形界面的一个主要方法。随着 3D 技术的应用在嵌入式领域不断增多,OpenGL 已经出现了独立的嵌入式技术标准 OpenGL ES。针对硬件资源相对紧缺的嵌人式系统,统一标准的操作系统平台接口层 EGL,仅保留 OpenGL 最常用的 API,增加了新的特性:定点运算、字节匹配、调色板纹理。在 OpenGL 标准的基础上,OpenGL ES 针对嵌入式系统硬件特点作了如下修
32、改:删除了冗余的 API 函数,保留一个精简高效的子集;删除了实现复杂和很少使用的函数;舍去部分数据类型,加人少许数据类型;加人了定点运算(对 OpenGL ES Comm 支持浮点和定点运算,对 OpenGL ES Comm-lite 仅支持定点运算) 。目前,OpenGL ES 已经推出了多个特征版本,OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程 3D 图形算法。OpenGL ES-SC 专为有高安全性需求的特殊市场精心打造。6)其他开发方案作为一个应用面非常广泛的嵌入式实时操作系统,
33、很多厂商意识到了第一章 绪论 7VxWorks 下图形开发的广阔市场,纷纷推出了各种图形界面开发方案。国内的MiniGUI 便是一款完善的轻量级图形用户界面支持系统。1.2.3 嵌入式 GUI 的发展趋势目前,伴随着各种手持、无线及嵌入式设备的迅猛发展,相应的软硬件设计也发生了很大的变化。许多设备都使用了 ARM,MIPS,摩托罗拉的 32 位微处理器及大屏幕的液晶图形显示器。由于在过去 10 年中,桌面操作模式取得了巨大成功,于是许多开发者在嵌入式设计中开始使用类似于桌面的操作系统。只要是面向人机交互的嵌入式产品,就涉及到文字或者图形的输出问题,人们与信息终端交互要求以 GUI 系统为中心的
34、交互式界面。手写文字输入、语音拨号上网、收发电子邮件以及彩色图形、图像己取得初步成效。由此可见,从应用领域的范围来看,嵌入式 GUI 系统的发展空间将是无比宽广的。随着虚拟现实、科学计算、可视化、多媒体技术以及硬件技术的飞速发展,嵌入式 GUI 将有如下几个发展方向 9:1)更加高效、可靠、可定制和小巧灵活,并具有很好的跨硬件平台、跨操作系统可移植性的嵌入式 GUI 系统将是将来的一个重要方向。2)支持 3D 建模。在目前的嵌入式系统中,3D 技术的应用并不常见,这与嵌入式系统的特点有很大的关系,然而,随着硬件技术的发展与市场的需求,目前,一些成熟的 3D 技术已经应用到了嵌入式环境中,比如
35、OpenGL ES 使用了大量的渲染技术以提供给用户调用。因此支持 3D 建模必将成为未来嵌入式 GUI 发展的一个趋势。3)智能化。精确交互技术是指能用一种技术来完全说明用户交互目的的交互方式,键盘和鼠标器均需用户精确输入。而人们的动作或思想往往并不很精确,计算机应该理解人的要求,甚至于纠正人的错误,智能化的界面也是未来嵌入式GUI 的一个重要方向。4)高宽带。支持高的输入带宽,快速大批量地输入信息以及对语音、图像、姿势等的输入和理解也是今后的发展方向。1.3 课题来源和意义本论文题目来源于实习工作中所进行的“某星载仪表控制计算机”的项目。该设备采用 VxWorks 作为其操作系统,而本课题
36、的目的在于选择合适的开发方案,在 VxWorks 环境下设计与开发一套友好的图形用户界面,能够满足在显示器上进行复杂和有实时性要求的图形信息、参数信息以及状态信息的显示,该系统另一个重要的技术要求是能提供对 3D 模块的支持,这就对研发人员提出了很8 基于 OpenGL 的 VxWorks 图形用户界面开发大的挑战。VxWorks 提供了一个图形开发库 WindML,同时也有很多软件开发商开发了多种基于 VxWorks 的图形界面软件开发包,但由于这些方案中有的价格昂贵,有的不适合开发高要求的图形界面,还有的不易移植并且存在很多BUG。最终,我们选用 OpenGL 开发我们的图形界面,主要原因
37、分析如下:第一:独立性和无关性。OpenGL 被设计成独立于硬件,独立于窗口系统的,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,其目的是将用户从具体的硬件中解放出来,完全不用理解这些系统的结构和指令系统,只要按照规定的格式书写应用程序就可以在任何支持该语言的硬件平台上执行,是专业图形处理、科学计算等高端应用领域的标准图形库。第二:灵活性和通用性。由于 OpenGL 是 3D 图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将 AutoCAD、3DS 等 3D 图形设计软件制作的 DFX 和 3DS 模型文件转
38、换成OpenGL 的顶点数组。另外,各种流行的编程语言都可以调用 OpenGL 的库函数,如:C 、C+、Fortran、Ada 、 Java。第三:高效性。OpenGL 被计算机工业界看作当前最先进的三维图形 API,它提供很强的绘制二维和三维图形能力,包括基本图元、造型、着色、光照、景深、阴影、混合、动画、反走样、纹理映射、隐面消除、图像处理等绘制功能。另外,OpenGL 利用显示列表概念引入了 PHIGS 中的层次概念,不需要包括复杂的预定义对象,设计者只需调用 OpenGL 的几个简单几何单元,即可建立所要求的模型,因而深得许多专业人员的喜爱。另外 OpenGL 顶部还设有实用程序库,
39、支持绘制二次曲线和曲面、nurbs 曲线和曲面以及其它高级图元。1.4 论文结构本文详细分析了国内外嵌入式 GUI 系统的发展现状,特别 VxWorks 系统下支持 3D 建模的嵌入式 GUI 系统的特点。OpenGL 作为新一代的三维图形工业标准,以其与硬件无关性和独立性使得它有很好的跨平台能力。而 Mesa3D 图形库则是目前为止对 OpenGL 标准最完整的一个实现,本论文的一个重要的工作就是将Mesa3D 移植到 VxWorks 系统,移植成功后,我们将结合 UGL 图形库为系统构建一个简单的、具有最基本功能的用户图形界面。本论文的安排如下:第一章:绪论。对嵌入式系统及其图形用户界面进
40、行介绍。说明课题来源,国内外现状和本论文主要章节安排。第二章:VxWorks 操作系统及媒体库 WindML。分析了 VxWorks 系统及其实时微内核 Wind 的特性,介绍了 VxWorks 的集成开发环境 Tornado 的几个重要第一章 绪论 9组件,最后详细说明风河公司提供的多媒体库 WindML,对其事件服务机制、主要 API 和利用它开发图形等多媒体程序的详细流程。第三章:OpenGL/Mesa 及其在 VxWorks 下的移植。介绍了当今三维图形工业标准 OpenGL 的开发库结构和它的一个实现版本 Mesa。然后实现了本课题的两个主要任务:移植 OpenGL/Mesa 到 V
41、xWorks 系统中,利用虚拟机搭建图形开发环境。第四章:VxWorks 系统 GUI 关键技术详细介绍。介绍了本课题的另一个主要的任务设计并实现一个以消息驱动机制为核心的、具有中文显示功能、能创建和显示窗口及常用控件、支持 3D 功能的图形用户界面系统。第五章:工程应用和效果测试。介绍了本 GUI 系统在实际工程中的应用情况及显示效果,验证了其普通 2D 图形界面和 3D 图形显示的性能。10 基于 OpenGL 的 VxWorks 图形用户界面开发第二章 VxWorks 操作系统及媒体库 WindML 11第二章 VxWorks 操作系统及媒体库 WindML2.1 VxWorks深入研究
42、2.1.1 VxWorks 概述 10VxWorks 是专门为实时嵌入式系统设计开发的操作系统内核。VxWorks 的出品公司美国风河公司组建于 1981 年,是一个专门从实时操作系统开发与生产的软件公司,该公司在实时操作系统领域被世界公认是最具有领导作用的公司。从 1983 年设计成功以来,VxWorks 已经经过广泛的验证,成功的应用在航空、航天、舰船、通信、医疗等关键领域,如美国的 F-16、FA-18 战斗机、B-2隐形轰炸机、爱国者导弹上以及 1997 年 4 月在火星表面登陆的火星探路者上都使用了 VxWorks。目前, VxWorks 得到了许多软硬件厂家的支持,这些第三方软硬件
43、厂家提供丰富的 VxWorks 的扩展组件。因此,从应用软件角度而言,VxWorks 操作系统在各种 CPU 硬件平台上可以提供统一的接口和一致的运行特性,应用程序无需做过多的改动就可以运行在各种 CPU 上,为程序员提供了一致的开发、运行环境,减少了重复劳动。VxWorks 操作系统是现在所有独立于处理器的实时系统中最具特色的操作系统之一。VxWorks 系统运行环境支持的 CPU 包括:Power PC、 68K、CPU32、SPARC、i960、x86、Mips 等;同时支持 RISC、DSP 技术。支持多种硬件环境也是 VxWorks 得以流行的重要原因。 VxWorks 的微内核 W
44、ind是一个具有较高性能的、标准的嵌入式实时操作系统内核,其主要特点包括:快速多任务切换、抢占式任务调度、任务间通信手段多样化等。该内核具有任务间切换时间短、中断延迟小、网络流量大等特点,与其他嵌入式实时操作系统相比具有一定的优势。VxWorks 是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、I/O 管理、网络协议及系统应用、C+和其他标准支持等几个部分。VxWorks 只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。VxWorks 系统具有较好的可剪裁的能力,可剪裁的组件超过 80 个,用户可以根据自己系统的功能目标通过交叉开发环
45、境方便地进行配置。VxWorks 支持应用程序的动态链接和动态下载,使开发者省去了每次调试都将应用程序与操作系统内核进行链接和下载的步骤,缩短了编辑调试的周期。12 基于 OpenGL 的 VxWorks 图形用户界面开发VxWorks 具有较好的兼容性。良好的兼容性,使其在不同运行环境间可以方便的移植,从而使用户在开发和培训方面所做的工作得到保护,减少了开发周期和经费。VxWorks 是最早兼容 POSIX1003.1b 标准的嵌入式实时操作系统之一,同时也是 POSIX 组织的主要会员。VxWorks 的 TCP/IP 协议栈部分在保持与 BSD4.4 版本的 TCP/IP 兼容基础上,在
46、实时性方面有较大提高。这使得基于 BSD4.4 UNIX socket 的应用程序可以很方便地移植到 VxWorks 中去,并且网络的实时性得到提高。VxWorks 还是第一个通过 Windows NT 测试的可以在 Windows NT 平台进行开发和仿真的嵌入式实时操作系统。同时支持 ANSIC 标准,并通过 ISO 9001 的认证。VxWorks 体系结构图如图 2.1 所示。图 2.1 VxWorks 体系结构2.1.2 VxWorks 实时微内核 1112VxWorks内核( wind)的基本功能可以分为如下几大类:1)任务管理;2)事件和异步信号服务;3)信号量服务;4)消息队列
47、服务;5)内存管理;6)中断服务程序;7)时钟管理和定时器服务;8)错误处理。其中,本课题主要用到的功能是任务管理、任务间通信和同步,下面将重点对这两方面内容进行描述。第二章 VxWorks 操作系统及媒体库 WindML 13 任务管理VxWorks实时内核 Wind提供了基本的多任务环境。从表面上来看,多个任务正在同时执行,实际上,系统内核根据某一调度策略让它们交替运行。系统调度器使用任务控制块(TCB)的数据结构来管理任务调度功能。TCB 用来描述一个任务,每一任务都与一个TCB关联。TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器
48、在任务最初被激活时以及从休眠态重新被激活时,要用到这些信息。此外,TCB还被用来存放任务的“ 上下文“ ( context)。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。在任务被重新执行时,必须要恢复上下文。嵌入实时系统的一个任务可有多种状态,其中最基本的状态有四种:就绪态:任务等待系统分配CPU 资源;悬置态:任务需等待某些不可利用的资源而被阻塞;休眠态:如果系统不需要某一个任务工作,则这个任务处于休眠状态;延迟态:任务被延迟时所处状态。任务的状态在这几种状态中切换。内核维护每个任务的当前状态。状态迁移发生在应用程序调用内核功能服务的时候。任务被创建以后进入挂起态,需要通
49、过特定的操作使被创建的任务进入就绪态,这一操作执行速度很快,使应用程序能够提前创建任务,并以一种快捷的方式激活该任务,如图2.2。 taskInit()图2.2 VxWorks任务状态的转换多任务调度须采用一种调度算法来分配CPU给就绪态任务。Wind内核采用基于优先级的抢占式调度法作为它的缺省策略,同时它也提供了轮转调度法。Wind内核划分优先级为256级(0255) 。优先级0为最高优先级,优先级255为最低。当任务被创建时,系统根据给定值分配任务优先级。优先级也可以是动态的,它们能在系统运行时被用户使用系统调用taskPrioritySet()来加以改变,但不能在运行时被操作系统所改变。基于优先级的抢占式调度,它具有很多优点。这种调度方法为每个任务指定不同的优先级。没有处于悬置或休眠态的最高优先级任务将一直运行下去。当更14 基于 OpenGL 的 VxWorks 图形用户界面开发高优先级的任务由就绪态进入运行时,系统内核立即保存当前任务的上下文,切换到更高优先级的任务。Wind内核可通过调用taskLock()和taskUnlock ()来使调度器起作