面向实时嵌入式系统的图形用户界面支持系统.docx
- 文档编号:5953662
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:22
- 大小:265.33KB
面向实时嵌入式系统的图形用户界面支持系统.docx
《面向实时嵌入式系统的图形用户界面支持系统.docx》由会员分享,可在线阅读,更多相关《面向实时嵌入式系统的图形用户界面支持系统.docx(22页珍藏版)》请在冰豆网上搜索。
面向实时嵌入式系统的图形用户界面支持系统
面向实时嵌入式系统的图形用户界面支持系统――MiniGUI
本文介绍面向实时嵌入式系统的图形用户界面�D�DMiniGUI,其产生、发展及优势,并与其他面向嵌入式系统的GUI进行了比较,然后结合实例介绍了MiniGUI的一些重要功能和特色,最后,本文介绍了正在进行的MiniGUI的开发情况。
嵌入式Linux系统的GUI发展概况
1.1GUI在嵌入式或实时系统中的地位
在常见的PDA等小型手持式设备上,由于硬件条件等的限制,我们看到的用户界面都非常简单,几乎看不到我们在PC机看到的华丽美观的GUI支持。
但最近出现的Palm等手持式电脑或者在WindowsCE等面向嵌入式系统的操作系统上,我们已经看到了完整的图形用户界面支持。
随着手持式设备的硬件条件的提高,我们估计嵌入式系统对轻量级GUI的需求会越来越迫切。
近来的市场需求显示,越来越多的嵌入式系统,包括PDA、机顶盒、DVD/VCD播放机、WAP手机等等系统均要求提供全功能的Web浏览器。
这包括HTML4.0的支持、JavaScript的支持,甚至包括Java虚拟机的支持。
而这一切均要求有一个高性能、高可靠的GUI的支持。
另外一个迫切需要轻量级GUI的系统是工业实时控制系统。
这些系统一般建立在标准PC平台上,硬件条件相对嵌入式系统要好,但对实时性的要求非常高,并且比起嵌入式系统来说,对GUI的要求也更高。
这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI之上,比如Windows或XWindow。
目前许多这类系统都建立在DOS等系统上,并且采用比较简单的手法实现GUI。
但是,在出现Linux系统之后,尤其在RT-Linux系统出现之后,许多工业控制系统开始采用RT-Linux作为操作系统,但GUI仍然是一个问题。
关键是XWindow太过庞大和臃肿。
这样,这些系统对轻型GUI的需求更加突出。
但是,我们必须清楚的是,嵌入式系统往往是一种定制设备,它们对GUI的需求也各不相同。
举个简单的例子,有的系统只要求一些图形功能,而有些系统要求完备的GUI支持。
因此,GUI也必须是可定制的。
综上所述,GUI在嵌入式系统或者实时系统中的地位将越来越重要,这些系统对GUI的基本要求包括:
1.轻型、占用资源少。
2.高性能。
3.高可靠性。
4.可配置。
1.2目前实时嵌入式系统GUI的实现方法
尽管实时嵌入式系统对GUI的需求越来越明显,但目前GUI的实现方法各有不同:
1.某些大型厂商有能力自己开发满足自身需要的GUI系统。
2.某些厂商没有将GUI作为一个软件层从应用程序中剥离,GUI的支持逻辑由应用程序自己负责。
3.采用某些比较成熟的GUI系统,比如MiniGUI或者其他GUI系统。
在上述手段中,第2种方法是一种临时解决方案。
利用这种手段编写的程序,无法将显示逻辑和数据处理逻辑划分开来,从而导致程序结构不好,不便于调试,并导致大量的代码重复。
我们认为GUI是一种类似于操作系统的基础软件,这种软件系统应该遵循一定的标准,并且应该是开放源码的自由软件,从而可以让开放商集中精力开发自己的应用程序。
目前看来,在Linux之上进行(实时)嵌入式系统开发的厂商,一般选择如下几种GUI系统:
紧缩的XWindow系统、MiniGUI、MicroWindows、OpenGUI、QT/Embedded等,下面首先对这些系统进行简单介绍,并对它们的优缺点进行比较。
1.2.1紧缩的XWindow系统
众所周知,XWindow是Linux以及其他类UNIX系统的标准GUI。
XWindow系统采用标准的客户/服务器体系结构,具有可扩展性好、可移植性好等优点。
但该系统的庞大、累赘和低效率也是大家所共知的。
为了获得应用程序的可移植性,许多厂家都试图通过对XWindow系统的紧缩开发,使之能够在嵌入式系统上运行。
国外已经开发出了大小约为800K的X服务器。
这对西方国家来说基本能够满足嵌入式系统的需求了。
但该系统的源代码尚不开放,从而很难进行本地化开发。
1.2.2MicroWindows
MicroWindows是一个开放源码的项目,目前由美国一家公司在主持开发。
该项目的开发非常活跃,国内也有人参与了其中的开发,并编写了GB2312等字符集的支持。
该项目的主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支持,TrueType字体支持等。
但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。
值得一提的是,该项目的许多控件是从MiniGUI中移植过去的,扫雷游戏也是从MiniGUI中移植过去的。
该项目已经启动了一个开放源码的浏览器项目,该浏览器在KDEkfm提供的HTML解释器的基础上开发,目前能够解释一些简单的HTML页面。
1.2.3OpenGUI
OpenGUI在Linux系统上存在已经很长时间了。
最初的名字叫FastGL,只支持256的线性显存模式。
但目前也支持其他显示模式。
这个库是用C++编写的,只提供C++接口。
1.2.4Qt/Embedded
QT/Embedded是著名的QT库开放商正在进行的面向嵌入式系统的QT版本。
这个版本的主要特点是可移植性较好,许多基于QT的XWindow程序可以非常方便地移植到嵌入式版本。
但是该系统不是开放源码的,如果你要使用这个库,可能需要支付昂贵的授权费用。
目前,已经有了QT/Embedded的演示版,预计明年初将出现QT/Embedded的正式发行版。
1.3MiniGUI简介
MiniGUI是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。
它主要运行于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上。
MiniGUI同时也是国内最早出现的几个自由软件项目之一。
MiniGUI的主要特色有:
遵循LGPL条款的纯自由软件。
提供了完备的多窗口机制。
这包括:
多个单独线程中运行的多窗口。
单个线程中主窗口的附属。
对话框和预定义的控件类(按钮、单行和多行编辑框、列表框、进度条、工具栏等)。
消息传递机制。
多字符集和多字体支持,目前支持ISO8859-1、GB2312、Big5等字符集,并且支持各种光栅字体和TrueType、Type1等矢量字体。
全拼、五笔等汉字输入法支持。
BMP、GIF、JPEG、PCX、TGA等常见图像文件的支持。
Windows的资源文件支持,如位图、图标、光标等。
插入符、定时器、加速键等。
其他(Beep、ETC/INI文件操作等)。
小巧。
包含全部功能的库文件大小为300K左右。
可配置。
可根据项目需求进行定制配置和编译。
高稳定性和高性能。
MiniGUI已经在Linux发行版安装程序、CNC系统、蓝点嵌入式系统等关键应用程序中得到了实际的应用。
可移植性好。
目前,MiniGUI可以在XWindow和Linux控制台上运行。
中科院EEOS开发组已经成功地将MiniGUI移植到了他们的POSIX兼容系统上。
蓝点软件(北京)研发中心也已经成功地将MiniGUI移植到了两款基于StrongARM的嵌入式系统上。
1.4各种面向实时嵌入式系统的GUI之比较
比较上述几个面向嵌入式系统的GUI,我们认为目前比较成熟,同时得到最多开发人员认可的有紧缩的XWindow系统、MiniGUI、MicroWindows等系统。
尽管紧缩的XWindow系统其X服务器可以降低到800K的大小,但因为XWindow系统的运行还需要其他程序和库的支持,包括X窗口管理器、XLib、建立在XLib之上的GTK和QT等函数库,因此,紧缩的XWindow系统在运行期间所占用的系统资源很多,加上中文显示和中文输入等本地化代码之后,系统的整体尺寸和运行时的资源消耗将进一步变大。
因此,嵌入式系统的开发商往往将紧缩的XWindow系统定位在机顶盒等对资源要求并不苛刻的嵌入式系统上。
MiniGUI和MicroWindows均为自由软件,只是前者遵循LGPL条款,后者遵循MPL条款。
这两个系统的技术路线也有所不同。
MiniGUI的策略是首先建立在比较成熟的图形引擎之上,比如SVGALib和LibGGI,开发的重点在于窗口系统、图形接口之上;MicroWindows目前的开发重点则在底层的图形引擎之上,窗口系统和图形接口方面的功能还比较欠缺。
举个例子来说,MiniGUI有一套用来支持多字符集和多编码的函数接口,可以支持各种常见的字符集,包括GB、BIG5、UNICODE等,而MicroWindows在多字符集的支持上尚没有统一接口。
MiniGUI的重要特色
2.1设计目标:
小巧和可配置
MiniGUI最初是为了满足一个工业控制系统(计算机数控系统)的需求而设计和开发的。
这个工业控制系统是清华大学为一台数控机床设计的计算机数控系统(CNC)。
在比较DOS、Windows98、WindowsNT、Linux等系统之后,该项目组决定选择RT-Linux作为实时操作系统,以便满足2ms甚至更高的实时性。
但是图形用户界面是一个问题,因为XWindow不适合于实时控制系统,并且当时XWindow系统的本地化也不尽人意。
因此,决定自己开发一套图形用户界面支持系统。
这就是MiniGUI产生的背景。
显然,MiniGUI一开始就针对实时系统而设计,因此,在设计之初就考虑到了小巧、高性能和高效率。
目前,这个数控系统的开发已近尾声,MiniGUI在其中担当了非常重要的角色。
在考虑到其他不同于数控系统的嵌入式系统时,为了满足千变万化的需求,必须要求GUI系统是可配置的。
在CNC系统中得到成功应用之后,我们立即着手于MiniGUI可配置的设计。
我们通过Linux下的automake和autoconf接口,实现了大量的编译配置选项,通过这些选项可指定MiniGUI库中包括哪些功能而同时不包括哪些功能。
因此,MiniGUI是一个非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。
2.2重要特色
2.2.1多线程和多窗口
MiniGUI中的窗口基本分四类,分别为主窗口、对话框、控件和主窗口中的子窗口。
MiniGUI中的主窗口和Windows应用程序的主窗口概念类似,但有一些重要的不同,MiniGUI中的每个主窗口及其附属主窗口对应于一个单独的线程,通过函数调用可建立主窗口以及对应的线程。
每个线程有一个消息队列,属于同一线程的所有主窗口从这一消息队列中获取消息并由窗口过程(回调函数)进行处理。
VCOnGUI,即VirtualConsoleOnMiniGUI,是MiniGUI上的虚拟控制台,即运行在MiniGUI上的Linux控制台仿真器,见图1。
从图1可以看到,MiniGUI应用程序能够同时创建多个窗口,并且运行在不同的线程。
图1VConGUI--MiniGUI上的Linux控制台仿真器
2.2.2对话框和标准控件
MiniGUI中的对话框是一种特殊的窗口,对话框一般和控件一起使用,这两个概念和Windows或XWindow中的相关概念是类似的。
MiniGUI支持的控件类型有:
静态框:
文本、图标或矩形框等。
文本框:
单行或多行的文本编辑框。
按钮:
单选钮、复选框和一般按钮等。
列表框。
进度条。
工具栏。
HappyLinux是国内某公司开发的中文Linux发行版,该发行版的安装程序就建立在MiniGUI之上。
图2和图3是HappyLinux安装程序的典型屏幕。
图2HappyLinux的软件包选择界面
图3HappyLinux的分区界面
2.2.3其他GUI元素
MiniGUI还支持弹出式菜单、插入符、定时器、光标、快捷键等常见的GUI元素。
图4和图5说明了其他GUI元素的应用情况。
图4是Bomb游戏,是Windows扫雷游戏的克隆。
图5是经典的俄罗斯方块游戏的MiniGUI版本,见图5。
图4扫雷游戏的克隆:
Bomb游戏图
图5俄罗斯方块游戏的MiniGUI版本
2.2.4消息和消息循环
在任何GUI系统中,均有事件或消息驱动的概念。
在MiniGUI中,我们使用消息驱动作为应用程序的创建构架。
在消息驱动的应用程序中,计算机外设发生的事件,例如键盘键的敲击、鼠标键的按击等,都由支持系统收集,将其以事先的约定格式翻译为特定的消息。
应用程序一般包含有自己的消息队列,系统将消息发送到应用程序的消息队列中。
应用程序可以建立一个循环,在这个循环中读取消息并处理消息,直到特定的消息传来为止。
这样的循环称为消息循环。
一般地,消息由代表消息的一个整型数和消息的附加参数组成。
应用程序一般要提供一个处理消息的标准函数。
在消息循环中,系统可以调用此函数,应用程序在此函数中处理相应的消息。
2.2.5图形和输入抽象层
在MiniGUI0.3.xx的开发中,我们引入了图形和输入抽象层(GraphicsandInputAbstractLayer,GAL和IAL)的概念。
抽象层的概念类似Linux内核虚拟文件系统的概念。
它定义了一组不依赖于任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口之上。
而用于实现这一抽象接口的底层代码称为"图形引擎"或"输入引擎",类似操作系统中的驱动程序。
这实际是一种面向对象的程序结构。
利用GAL和IAL,MiniGUI可以在许多图形引擎上运行,比如SVGALib和LibGGI,并且可以非常方便地将MiniGUI移植到其他POSIX系统上,只需要根据我们的抽象层接口实现新的图形引擎即可。
目前,我们已经编写了基于SVGALib和LibGGI的图形引擎。
利用LibGGI,MiniGUI应用程序可以运行在XWindow上,将大大方便应用程序的调试。
我们目前正在进行MiniGUI私有图形引擎的设计开发。
通过MiniGUI的私有图形引擎,我们可以最大程度地针对窗口系统对图形引擎进行优化,最终提高系统的图形性能和效率。
GAL和IAL的实现,大大提高了MiniGUI的可移植性。
我们不需要对MiniGUI的上层代码进行丝毫修改,只需实现新的GAL和IAL引擎,就可以让MiniGUI运行在其他基于不同硬件的嵌入式Linux系统上。
比如,蓝点公司在两周内就将MiniGUI移植到了基于StrongARM的两款嵌入式系统之上。
图6就是蓝点公司开发的运行于StrongARM之上的智能信息家电产品。
图6正在进行网上购物的蓝点信息家电客户端
2.2.6多字体和多字符集支持
在成功引入GAL和IAL之后,我们又在处理字体和字符集的模块当中引入了逻辑字体的概念。
逻辑字体是MiniGUI用来处理文本(包括文本输出和文本分析)的顶层接口。
逻辑字体接口将各种不同的字体(比如宋体、黑体和揩体)和字体格式(比如等宽字体、变宽字体等光栅字体和TrueType、Type1等矢量字体),以及各种不同字符集(ISO-8859、GB2312、Big5、UNICODE等)综合了起来,从而可以通过统一的接口显示不同字符集的不同字体的文本,并且还可以分析各种字符集文本的组成,比如字符、单词等。
在多字体和多字符集的支持中,我们也采用了面向对象的软件技术,使得添加新的字体支持和新的字符集支持非常方便。
目前,MiniGUI能够支持各种光栅字体和TrueType、Type1等矢量字体,并能够支持GB2312、Big5等多字节字符集,UNICODE的支持正在开发当中。
有了这一技术,我们就可以在MiniGUI的同一窗口中显示属于不同字符集的、不同字体的文本。
图7给出了MiniGUI的高级字体支持功能。
第一个界面采用TTF字体,以旋转方式输出"MiniGUIISGREAT!
";第二个界面给出了多种字体文字的居中、右对齐等输出效果。
图7MiniGUI的高级字体支持
3MiniGUI近期开发情况
从1998年下半年开始MiniGUI的开发以后,就一直得到了来自Internet的自由软件程序员的鼓励和支持。
到目前为止,国内外已经有多家嵌入式系统厂商开始在MiniGUI上开发其嵌入式产品,其中也包括清华大学、中科院等科研单位。
因此可以说,MiniGUI的开发已经从最初的孤军作战发展到包括企业、科研单位、个人在内的市集式开发模式,真正体现出了自由软件的强大生命力。
目前,正在进行的MiniGUI开发包括:
1.针对GUI系统开发MiniGUI私有的图形引擎,以便进一步提高图形操作的性能,同时为添加高级的光栅操作函数打下基础。
2.在多窗口处理上进一步开发,以便完善现有的窗口机制。
比如目前已进入测试状态的控件嵌套功能。
3.进一步开发MiniGUI上的控件,比如工具栏、高级列表框等。
4.提供基于传统UNIX系统IPC机制的客户/服务器体系,以便支持大型应用程序。
5.开发基于MiniGUI的GPL应用程序,比如小型字处理程序、电子邮件客户程序等。
MiniGUI近期开发情况
从1998年下半年开始MiniGUI的开发以后,就一直得到了来自Internet的自由软件程序员的鼓励和支持。
到目前为止,国内外已经有多家嵌入式系统厂商开始在MiniGUI上开发其嵌入式产品,其中也包括清华大学、中科院等科研单位。
因此可以说,MiniGUI的开发已经从最初的孤军作战发展到包括企业、科研单位、个人在内的市集式开发模式,真正体现出了自由软件的强大生命力。
目前,正在进行的MiniGUI开发包括:
1.针对GUI系统开发MiniGUI私有的图形引擎,以便进一步提高图形操作的性能,同时为添加高级的光栅操作函数打下基础。
2.在多窗口处理上进一步开发,以便完善现有的窗口机制。
比如目前已进入测试状态的控件嵌套功能。
3.进一步开发MiniGUI上的控件,比如工具栏、高级列表框等。
4.提供基于传统UNIX系统IPC机制的客户/服务器体系,以便支持大型应用程序。
5.开发基于MiniGUI的GPL应用程序,比如小型字处理程序、电子邮件客户程序等。
MiniGUI的网络资源
如果您对MiniGUI感兴趣,可参考如下信息获得您想要的资料,您也可以从FTP站点下载最新的MiniGUI完整源代码及资源文件。
如果您在利用MiniGUI进行开发的过程中遇到困难,请订阅我们的邮件列表。
提问、解答或者发表您的高见。
参考资料
∙MiniGUI资源
oMiniGUI主页
oMiniGUIFTP站点
∙MiniGUI邮件列表
o发信:
minigui-devel@
o订阅:
minigui-devel-subscribe@
o解除订阅:
minigui-devel-unsubscribe@
关于作者
魏永明(ymwei@minigui.org),男,26岁,工学硕士,现任蓝点软件(深圳)有限公司北京研发中心技术主管。
国内最有影响的自由软件项目之一--MiniGUI的创始人以及主要开发人员。
著有《Linux实用教程》与《学用Linux与WindowsNT》,并主持翻译了《RedHatLinux奥秘》等大量优秀的Linux技术著作。
是清华大学AKALinux编程技术系列讲座的主讲人。
嵌入式图形用户界面的改进
摘要:
介绍嵌入式图形用户界面(GUI)的定制和改进。
关键字:
嵌入式系统、图形用户界面,Qtopia。
Abstract:
ThecustomizationandimprovementoftheEmbeddedSystem’sGUIareintroduced.
Keywords:
EmbeddedSystem、GUI、Qtopia.
一.引言
我们时常在PC机上看到WINDOWS图形用户界面,以及LINUX上的KDE、GNOME,这些图形用户界面美观且方便用户操作,功能全面。
嵌入式系统经常有一些特殊的要求,而这些要求普通的PC机上的图形窗口系统是不能满足的。
比如特殊的外观效果,控制提供给用户的函数,提高装载速度,特殊的低层图形或输入设备。
因此,嵌入式系统必定要有自己的图形用户界面。
嵌入式图形用户界面就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。
当今世界,嵌入式系统正以它体积小、专用性等特点深入社会应用的各个层次。
在某些嵌入式应用领域中,比如PDA、HandHeldPC、AutoPC等嵌入式系统中,图形用户界面的性能将直接影响整个系统的性能,是产品制造商和最终用户共同关注的问题。
如何针对用户的需求,在已有的图形用户界面上,定制和改进出具有特定功能的图形用户界面,是嵌入式系统开发者共同关注的问题。
本文主要针对嵌入式系统图形用户界面二次开发的改进和定制。
二.嵌入式图形用户界面的分类
嵌入式系统往往是一种定制设备,它们对图形用户界面的需求也各不相同。
有的系统只要求一些图形功能,而有些系统要求完备的GUI支持。
因此很多嵌入式系统需要自己特定的嵌入式图形用户界面。
下面是几种常用的嵌入式图形用户界面及它们的特点:
1.MiniGUI
MiniGUI是在Linux控制台上运行的多窗口图形用户界面支持系统,可以在以Linux为基础的应用平台上提供一个简单可行的GUI支持系统。
“小”是MiniGUI的特色,MiniGUI可以应用在电视机顶盒、实时控制系统、掌上电脑等诸多场合。
它是基于SVGA库和LinuxThread库的。
MiniGUI使用类似于Win32的API来获得简单的具有Win98风格的图形用户界面,接口完备。
2.Microwindows
Microwindows是一个开放源代码项目,目前由美国一家公司在主持开发。
该项目的开发非常活跃,国内也有人参与了其中的开发,并编写了GB2312等字符集的支持。
它主要特色在于提供了比较完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支持,TrueType字体支持等。
它使得那些只有在具有相当的硬盘和RAM配置的高端Windows系统才能实现的窗口系统,如MicrosoftWindows和X2Windows,可以在嵌入式这类设备上运行。
Microwindows能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。
它拥有WIN32编程接口,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 实时 嵌入式 系统 图形 用户界面 支持系统