⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 面向实时嵌入式系统的图形用户界面支持系统――minigui 背景,发展及优势.htm

📁 是一个标准的体系结构
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<p>在上述手段中,第 2种方法是一种临时解决方案。利用这种手段编写的程序,无法将显示逻辑和数据处理逻辑划分开来,从而导致程序结构不好,不便于调试,并导致大量的代码重复。我们认为GUI是一种类似于操作系统的基础软件,这种软件系统应该遵循一定的标准,并且应该是开放源码的自由软件,从而可以让开放商集中精力开发自己的应用程序。目前看来,在Linux 之上进行(实时)嵌入式系统开发的厂商,一般选择如下几种 GUI系统:紧缩的 X Window系统、MiniGUI、MicroWindows、OpenGUI、QT/Embedded等,下面首先对这些系统进行简单介绍,并对它们的优缺点进行比较。</p><p>1.2.1 紧缩的 X Window 系统</p><p>众所周知,X Window 是 Linux 以及其他类 UNIX 系统的标准 GUI。XWindow系统采用标准的客户/服务器体系结构,具有可扩展性好、可移植性好等优点。但该系统的庞大、累赘和低效率也是大家所共知的。为了获得应用程序的可移植性,许多厂家都试图通过对X Window系统的紧缩开发,使之能够在嵌入式系统上运行。国外已经开发出了大小约为800K 的 X服务器。这对西方国家来说基本能够满足嵌入式系统的需求了。但该系统的源代码尚不开放,从而很难进行本地化开发。</p><p>1.2.2 MicroWindows</p><p>MicroWindows是一个开放源码的项目,目前由美国一家公司在主持开发。该项目的开发非常活跃,国内也有人参与了其中的开发,并编写了GB2312等字符集的支持。该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如Alpha 混合,三维支持,TrueType字体支持等。但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。值得一提的是,该项目的许多控件是从MiniGUI 中移植过去的,扫雷游戏也是从 MiniGUI 中移植过去的。</p><p>该项目已经启动了一个开放源码的浏览器项目,该浏览器在 KDE kfm提供的 HTML 解释器的基础上开发,目前能够解释一些简单的 HTML页面。</p><p>1.2.3 OpenGUI</p><p>OpenGUI 在 Linux 系统上存在已经很长时间了。最初的名字叫FastGL,只支持 256的线性显存模式。但目前也支持其他显示模式。这个库是用 C++编写的,只提供 C++ 接口。</p><p>1.2.4 Qt/ Embedded</p><p>QT/Embedded 是著名的 QT 库开放商正在进行的面向嵌入式系统的 QT版本。这个版本的主要特点是可移植性较好,许多基于 QT 的 X Window程序可以非常方便地移植到嵌入式版本。但是该系统不是开放源码的,如果你要使用这个库,可能需要支付昂贵的授权费用。目前,已经有了QT/Embedded 的演示版,预计明年初将出现 QT/Embedded的正式发行版。</p><p>1.3 MiniGUI 简介</p><p>MiniGUI是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行于Linux 控制台,实际可以运行在任何一种具有 POSIX 线程支持的 POSIX兼容系统上。MiniGUI同时也是国内最早出现的几个自由软件项目之一。</p><p>MiniGUI 的主要特色有:</p><p>遵循 LGPL 条款的纯自由软件。<br /> 提供了完备的多窗口机制。这包括:<br /> 多个单独线程中运行的多窗口。<br /> 单个线程中主窗口的附属。<br /> 对话框和预定义的控件类(按钮、单行和多行编辑框、列表框、进度条、工具栏等)。<br /> 消息传递机制。<br /> 多字符集和多字体支持,目前支持 ISO8859-1、GB2312、Big5等字符集,并且支持各种光栅字体和 TrueType、Type 1等矢量字体。<br /> 全拼、五笔等汉字输入法支持。<br /> BMP、GIF、JPEG、PCX、TGA 等常见图像文件的支持。<br /> Windows 的资源文件支持,如位图、图标、光标等。<br /> 插入符、定时器、加速键等。<br /> 其他(Beep、ETC/INI 文件操作等)。<br /> 小巧。包含全部功能的库文件大小为 300 K左右。<br /> 可配置。可根据项目需求进行定制配置和编译。<br /> 高稳定性和高性能。MiniGUI 已经在Linux 发行版安装程序、CNC系统、蓝点嵌入式系统等关键应用程序中得到了实际的应用。<br /> 可移植性好。目前,MiniGUI 可以在 X Window 和 Linux控制台上运行。中科院 EEOS 开发组已经成功地将 MiniGUI 移植到了他们的POSIX 兼容系统上。蓝点软件(北京)研发中心也已经成功地将 MiniGUI移植到了两款基于 StrongARM 的嵌入式系统上。</p><p>1.4 各种面向实时嵌入式系统的 GUI 之比较</p><p>比较上述几个面向嵌入式系统的GUI,我们认为目前比较成熟,同时得到最多开发人员认可的有紧缩的 XWindow 系统、MiniGUI、MicroWindows 等系统。尽管紧缩的 X Window系统其 X 服务器可以降低到 800K 的大小,但因为 X Window系统的运行还需要其他程序和库的支持,包括 X 窗口管理器、XLib、建立在XLib 之上的 GTK 和 QT 等函数库,因此,紧缩的X Window系统在运行期间所占用的系统资源很多,加上中文显示和中文输入等本地化代码之后,系统的整体尺寸和运行时的资源消耗将进一步变大。因此,嵌入式系统的开发商往往将紧缩的X Window 系统定位在机顶盒等对资源要求并不苛刻的嵌入式系统上。</p><p>MiniGUI 和 MicroWindows 均为自由软件,只是前者遵循 LGPL条款,后者遵循 MPL 条款。这两个系统的技术路线也有所不同。MiniGUI的策略是首先建立在比较成熟的图形引擎之上,比如 SVGALib 和LibGGI,开发的重点在于窗口系统、图形接口之上;MicroWindows目前的开发重点则在底层的图形引擎之上,窗口系统和图形接口方面的功能还比较欠缺。举个例子来说,MiniGUI有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括GB、BIG5、UNICODE 等,而 MicroWindows在多字符集的支持上尚没有统一接口。</p><a id="2" name="2"></a><p><strong class="subhead">MiniGUI 的重要特色</strong></p><p>2.1 设计目标:小巧和可配置</p><p>MiniGUI最初是为了满足一个工业控制系统(计算机数控系统)的需求而设计和开发的。这个工业控制系统是清华大学为一台数控机床设计的计算机数控系统(CNC)。在比较DOS、Windows 98、Windows NT、Linux 等系统之后,该项目组决定选择RT-Linux 作为实时操作系统,以便满足 2ms甚至更高的实时性。但是图形用户界面是一个问题,因为 X Window不适合于实时控制系统,并且当时 X Window系统的本地化也不尽人意。因此,决定自己开发一套图形用户界面支持系统。这就是MiniGUI 产生的背景。显然,MiniGUI一开始就针对实时系统而设计,因此,在设计之初就考虑到了小巧、高性能和高效率。目前,这个数控系统的开发已近尾声,MiniGUI在其中担当了非常重要的角色。</p><p>在考虑到其他不同于数控系统的嵌入式系统时,为了满足千变万化的需求,必须要求GUI 系统是可配置的。在 CNC 系统中得到成功应用之后,我们立即着手于MiniGUI 可配置的设计。我们通过 Linux 下的 automake 和 autoconf接口,实现了大量的编译配置选项,通过这些选项可指定 MiniGUI库中包括哪些功能而同时不包括哪些功能。</p><p>因此,MiniGUI是一个非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。</p><p>2.2 重要特色</p><p>2.2.1 多线程和多窗口</p><p>MiniGUI中的窗口基本分四类,分别为主窗口、对话框、控件和主窗口中的子窗口。</p><p>MiniGUI 中的主窗口和 Windows应用程序的主窗口概念类似,但有一些重要的不同,MiniGUI中的每个主窗口及其附属主窗口对应于一个单独的线程,通过函数调用可建立主窗口以及对应的线程。每个线程有一个消息队列,属于同一线程的所有主窗口从这一消息队列中获取消息并由窗口过程(回调函数)进行处理。</p><p>VCOnGUI,即 Virtual Console On MiniGUI,是 MiniGUI上的虚拟控制台,即运行在 MiniGUI 上的 Linux 控制台仿真器,见图1。从图1可以看到,MiniGUI应用程序能够同时创建多个窗口,并且运行在不同的线程。</p><p align="CENTER"><img src="image002.jpg" border="0"  alt=""/></p><p align="CENTER">图 1 VConGUI -- MiniGUI 上的 Linux控制台仿真器</p><p>2.2.2 对话框和标准控件</p><p>MiniGUI中的对话框是一种特殊的窗口,对话框一般和控件一起使用,这两个概念和Windows 或 X Window 中的相关概念是类似的。MiniGUI支持的控件类型有:</p><p>静态框:文本、图标或矩形框等。</p><p>文本框:单行或多行的文本编辑框。</p><p>按钮:单选钮、复选框和一般按钮等。</p><p>列表框。</p><p>进度条。</p><p>工具栏。</p><p>HappyLinux 是国内某公司开发的中文 Linux发行版,该发行版的安装程序就建立在 MiniGUI 之上。图 2 和图 3 是HappyLinux 安装程序的典型屏幕。</p><p align="CENTER"><img src="image004.jpg" border="0"  alt=""/> <img src="image006.jpg" border="0"  alt=""/></p><p align="CENTER">图 2 HappyLinux 的软件包选择界面 图 3 HappyLinux的分区界面</p><p>2.2.3 其他 GUI 元素</p><p>MiniGUI 还支持弹出式菜单、插入符、定时器、光标、快捷键等常见的GUI 元素。图 4 和图 5 说明了其他 GUI 元素的应用情况。图 4 是 Bomb游戏,是 Windows 扫雷游戏的克隆。图 5 是经典的俄罗斯方块游戏的MiniGUI 版本,见图 5。</p><p align="CENTER"><img src="image007.jpg" border="0"  alt=""/> <img src="image010.jpg" border="0"  alt=""/></p><p align="CENTER">图 4 扫雷游戏的克隆:Bomb 游戏图 图 5俄罗斯方块游戏的 MiniGUI 版本</p><p>2.2.4 消息和消息循环</p><p>在任何 GUI系统中,均有事件或消息驱动的概念。在MiniGUI中,我们使用消息驱动作为应用程序的创建构架。</p><p>在消息驱动的应用程序中,计算机外设发生的事件,例如键盘键的敲击、鼠标键的按击等,都由支持系统收集,将其以事先的约定格式翻译为特定的消息。应用程序一般包含有自己的消息队列,系统将消息发送到应用程序的消息队列中。应用程序可以建立一个循环,在这个循环中读取消息并处理消息,直到特定的消息传来为止。这样的循环称为消息循环。一般地,消息由代表消息的一个整型数和消息的附加参数组成。</p><p>应用程序一般要提供一个处理消息的标准函数。在消息循环中,系统可以调用此函数,应用程序在此函数中处理相应的消息。</p><p>2.2.5 图形和输入抽象层</p><p>在 MiniGUI 0.3.xx 的开发中,我们引入了图形和输入抽象层(Graphicsand Input Abstract Layer,GAL 和 IAL)的概念。抽象层的概念类似Linux内核虚拟文件系统的概念。它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口之上。而用于实现这一抽象接口的底层代码称为"图形引擎"或"输入引擎",类似操作系统中的驱动程序。这实际是一种面向对象的程序结构。利用GAL 和 IAL,MiniGUI 可以在许多图形引擎上运行,比如 SVGALib 和LibGGI,并且可以非常方便地将 MiniGUI 移植到其他 POSIX系统上,只需要根据我们的抽象层接口实现新的图形引擎即可。目前,我们已经编写了基于SVGALib 和 LibGGI 的图形引擎。利用 LibGGI, MiniGUI应用程序可以运行在 X Window上,将大大方便应用程序的调试。我们目前正在进行 MiniGUI私有图形引擎的设计开发。通过 MiniGUI的私有图形引擎,我们可以最大程度地针对窗口系统对图形引擎进行优化,最终提高系统的图形性能和效率。</p><p>GAL 和 IAL 的实现,大大提高了 MiniGUI 的可移植性。我们不需要对MiniGUI 的上层代码进行丝毫修改,只需实现新的 GAL 和 IAL引擎,就可以让 MiniGUI 运行在其他基于不同硬件的嵌入式 Linux系统上。比如,蓝点公司在两周内就将 MiniGUI 移植到了基于 StrongARM的两款嵌入式系统之上。图 6 就是蓝点公司开发的运行于 StrongARM之上的智能信息家电产品。</p><p align="CENTER"><img src="image012.jpg" border="0"  alt=""/></p><p align="CENTER">图 6 正在进行网上购物的蓝点信息家电客户端</p><p>2.2.6 多字体和多字符集支持</p><p>在成功引入 GAL 和 IAL之后,我们又在处理字体和字符集的模块当中引入了逻辑字体的概念。逻辑字体是MiniGUI用来处理文本(包括文本输出和文本分析)的顶层接口。逻辑字体接口将各种不同的字体(比如宋体、黑体和揩体)和字体格式(比如等宽字体、变宽字体等光栅字体和TrueType、Type1等矢量字体),以及各种不同字符集(ISO-8859、GB2312、Big5、UNICODE等)综合了起来,从而可以通过统一的接口显示不同字符集的不同字体的文本,并且还可以分析各种字符集文本的组成,比如字符、单词等。在多字体和多字符集的支持中,我们也采用了面向对象的软件技术,使得添加新的字体支持和新的字符集支持非常方便。目前,MiniGUI能够支持各种光栅字体和 TrueType、Type 1 等矢量字体,并能够支持

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -