Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1390960
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类:

2006-06-07 10:26:10

MiniGUI是面向实时嵌入式系统的轻量级图形用户界面支持系统。它自1999年初遵循GPL条款发布第一个版本以来,已广泛应用于手持信息终端、机顶盒、工业控制系统及工业仪表、彩票机、金融终端等产品和领域。

目前,MiniGUI已成为跨操作系统的图形用户界面支持系统,可在Linux/uClinux、eCos、uC/OS-II、VxWorks等操作系统上运行;已验证的硬件平台包括Intel x86、ARM(ARM7/AMR9/StrongARM/xScale)、PowerPC、MIPS、M68K(DragonBall/ColdFire)等。

MiniGUI的特点

MiniGUI为实时嵌入式操作系统提供了完善的图形及图形用户界面支持。可移植性设计使得它不论在哪个硬件平台、哪种操作系统上运行,均能为上层应用程序提供一致的应用程序编程接口(API)。

MiniGUI的功能特色

作为操作系统和应用程序之间的中间件,MiniGUI将底层操作系统及硬件平台差别隐藏了起来,并对上层应用程序提供了一致的功能特性,这些功能特性包括:

1.完备的多窗口机制和消息传递机制。

2.常用的控件类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、进度条、属性页、工具栏、拖动条、树型控件、月历控件等。

3.对话框和消息框支持以及其它GUI 元素,包括菜单、加速键、插入符、定时器等。

4.界面皮肤支持。用户可通过皮肤支持获得外观非常华丽的图形界面。

5.通过两种不同的内部软件结构支持低端显示设备(比如单色 LCD)和高端显示设备(比如彩色显示器),前者小巧灵活,而后者在前者的基础上提供了更加强大的图形功能。

6.Windows 的资源文件支持,如位图、图标、光标等。

7.各种流行图像文件的支持,包括JPEG、GIF、PNG、TGA、BMP等。

8.多字符集和多字体支持,目前支持ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、Unicode等字符集,支持等宽点阵字体、变宽点阵字体、Qt/Embedded使用的嵌入式字体QPF、TrueType 以及Adobe Type1等矢量字体。

9.多种键盘布局的支持。MiniGUI除支持常见的美式PC键盘布局之外,还支持法语、德语等语种的键盘布局。

10.简体中文(GB2312)输入法支持,包括内码、全拼、智能拼音等。用户还可以从飞漫软件获得五笔、自然码等输入法支持。

11.针对嵌入式系统的特殊支持,包括一般性的I/O流操作,字节序相关函数等。
MiniGUI的技术优势

和其它针对嵌入式产品的图形系统相比,MiniGUI具有如下技术优势:

1.轻型、占用资源少

MiniGUI 本身的占用空间非常小。以嵌入式Linux操作系统为例,MiniGUI的典型存储空间占用情况如下:

◆ Linux 内核:300KB~500KB(由系统决定)

◆ MiniGUI支持库:500KB~700KB(由编译选项确定)

◆ MiniGUI字体、位图等资源:400KB(由应用程序确定,可缩小到200KB以内)

◆ GB2312输入法码表:200KB(不是必需的,由应用程序确定)

◆ 应用程序:1MB~2MB(由系统决定)

总体的系统占有空间应该在2MB到4MB左右。在某些系统上,功能完备的MiniGUI系统本身所占用的空间可进一步缩小到1MB以内。

MiniGUI能够在CPU主频为30MHz,仅有4MB RAM的系统上正常运行(使用uClinux操作系统)。这是其它针对嵌入式产品的图形系统,比如MicroWindows或者Qt/Embedded所无法达到的。

2.高性能、高可靠性

MiniGUI 良好的体系结构及优化的图形接口,可确保最快的图形绘制速度。在设计之初,就充分考虑到了实时嵌入式系统的特点,针对多窗口环境下的图形绘制开展了大量的研究及开发,优化了MiniGUI的图形绘制性能及资源占有。MiniGUI在大量实际系统中的应用,尤其在工业控制系统的应用,证明MiniGUI具有非常好的性能。

从1999年MiniGUI的第一个版本发布以来,就有许多产品和项目使用 MiniGUI,MiniGUI 本身也不断从这些产品或者项目当中获得发展动力和新的技术需求,不断提高了自身的可靠性和健壮性。

3.可配置

为满足嵌入式系统千变万化的需求,必须要求GUI系统是可配置的。和Linux内核类似,MiniGUI也实现了大量的编译配置选项,通过这些选项可指定MiniGUI库中包括哪些功能而同时不包括哪些功能。大体说来,可以在如下几个方面对MiniGUI进行定制配置:

◆ 指定MiniGUI要运行的操作系统,是普通嵌入式Linux、uClinux、eCos还是 uC/OS-II或者VxWorks。

◆ 指定生成基于线程的MiniGUI-Threads运行模式还是基于进程的MiniGUI-Lite运行模式,或者只是最简单的MiniGUI-Standalone运行模式。

◆ 指定要采用老的GAL/GDI接口(低端显示设备)还是新的GAL/GDI接口(高端显示设备)。

◆ 指定需要支持的GAL引擎和IAL引擎,以及引擎相关选项。

◆ 指定需要支持的字体类型。

◆ 指定需要支持的字符集。

◆ 指定需要支持的图像文件格式。

◆ 指定需要支持的控件类。

◆ 指定控件的整体风格,是三维风格、平面风格还是手持终端风格。

这些配置选项大大增强了MiniGUI的灵活性,对用户来讲,可针对具体应用需求量体裁衣,生成最适合产品需求系统及软件。

4.可伸缩性强

MiniGUI丰富的功能和可配置特性,使得它既可运行于基于龙珠的低端产品中,亦可运行于基于ARM9的高端产品中,并使用MiniGUI的高级控件风格及皮肤界面等技术,创建华丽的用户界面。

5. 跨操作系统支持

理论上,MiniGUI可支持任意一个多任务嵌入式操作系统;实际已支持Linux/uClinux、eCos、uC/OS-II、VxWorks等嵌入式操作系统。同时,在不同操作系统上的MiniGUI,提供完全兼容的API接口。

总之,MiniGUI是一个非常适合于实时嵌入式产品的高效、可靠、可定制、小巧灵活的图形用户界面支持系统。
MiniGUI的典型应用

从最初的数控系统到目前流行的智能手持终端设备,MiniGUI已经在大量产品中得到了应用。MiniGUI最主要的应用领域大致可分为三类:

◆ 高端手机、PDA 类产品。图1给出的是采用eCos操作系统,基于MiniGUI开发的高端智能手机的应用程序界面。

图1:


◆ 数字媒体及机顶盒类产品。图2给出的是基于MiniGUI开发的机顶盒浏览器产品(由北京东方创科技术有限公司开发)以及由飞漫软件开发的法律政务查询终端产品。

图2:


◆ 工业仪表及控制系统。图3给出的是基于Linux和MiniGUI操作系统开发的数控系统、工业仪表及医疗仪器的界面。

图3:


支持众多嵌入式系统

为什么MiniGUI能够在如此众多的嵌入式操作系统上运行?这是因为MiniGUI具有良好的软件架构,通过抽象层将MiniGUI上层和底层操作系统隔离开来。如图4所示,基于MiniGUI的应用程序一般通过ANSI C库以及MiniGUI自身提供的API来实现自己的功能;MiniGUI中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关系底层的硬件平台输出和输入设备。

另外,MiniGUI特有的运行模式概念,也为跨操作系统的支持提供了便利。

图4:


和Linux这样的类Unix操作系统相比,一般意义上的传统嵌入式操作系统具有一些特殊性。举例而言,诸如uClinux、uC/OS-II、eCos、VxWorks等操作系统,通常运行在没有MMU(内存管理单元,用于提供虚拟内存支持)的CPU上;这时,往往就没有进程的概念,而只有线程或者任务的概念,这样,GUI系统的运行环境也就大相径庭。因此,为了适合不同的操作系统环境,我们可将MiniGUI配置成三种运行模式:

◆ MiniGUI-Threads。运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。这种运行模式非常适合于大多数传统意义上的嵌入式操作系统,比如uC/OS-II、eCos、VxWorks、pSOS等等。当然,在Linux和uClinux上,MiniGUI也能以MiniGUI-Threads的模式运行。

◆ MiniGUI-Lite。和MiniGUI-Threads相反,MiniGUI-Lite上的每个程序是单独的进程,每个进程也可以建立多个窗口。MiniGUI-Lite适合于具有完整Unix特性的嵌入式操作系统,比如嵌入式Linux。

◆ MiniGUI-Standalone。这种运行模式下,MiniGUI可以以独立进程的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用uClinux的嵌入式产品中,因为各种原因而缺少线程支持,这时就可以使用MiniGUI-Standalone来开发应用软件。

一般而言,MiniGUI-Standalone模式的适应面最广,可以支持几乎所有的操作系统,甚至包括类似DOS这样的操作系统;MiniGUI-Threads模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或者具备完整Unix特性的普通操作系统;MiniGUI-Lite模式的适用面较小,它仅适合于具备完整Unix特性的普通操作系统。

但不论采用哪种运行模式,MiniGUI为上层应用软件提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。
uC/OS-II()是一个应用于实时嵌入式应用的开源、实时操作系统内核。因为uC/OS-II非常简单,只要有一个普通的C编译器,就能完成编译并运行该操作系统,因此,uC/OS-II首先在教学中得到了广泛应用。因为其简单及实时性好的特点,现在也有一些用户开始使用uC/OS-II操作系统开发正式的嵌入式产品。

将MiniGUI移植到uC/OS-II是相对复杂的一项工作。因为uC/OS-II中缺乏像malloc/free 甚至是printf/fprintf/sprintf这样的接口,不过,最重要的还是缺乏与POSIX-Threads兼容的接口。为此,我们编写了POSIX-Threads的绕转接口,这些绕转接口兼容于POSIX-Threads。同时,我们还实现了malloc/free,以及printf/sprintf/fprintf等接口。

因涉及到如此多底层特性的增强和修改,整个系统的调试将是非常困难的。为解决调试问题,我们首先在SkyEye(清华大学陈渝主持的自由软件项目,)模拟器上运行uC/OS-II操作系统及MiniGUI for uC/OS-II。

我们首先使用了MiniGUI内部的 Dummy GAL引擎和Dummy/Auto IAL引擎(这两个引擎分别通过软件方法来模拟实际的输出和输入设备,比如LCD显示屏及键盘)来运行MiniGUI的应用程序。尽管我们看不到真实的屏幕输出,但从应用程序在运行过程中打印的输出信息,我们可以看到MiniGUI for uC/OS-II 已经正常工作了。接下来的工作就是将MiniGUI for uC/OS-II移植到正式的硬件产品中。

我们在S3C2410开发板上用ADS的armcc编译并测试了MiniGUI的uC/OS-II版本。这次,我们针对这个开发板编写了正式的图形和输入引擎。MiniGUI的所有示例程序都可以在这块开发板上正常运行。

MiniGUI for uC/OS-II版本为uC/OS-II用户提供了另外一个很好的GUI解决方案。相对 Micrium.com提供的uC/GUI而言,MiniGUI for uC/OS-II版本能够提供更好的功能和特性。

MiniGUI的未来

通过近两年的自由软件商业化运作,飞漫软件已将MiniGUI打造成了一款优秀的跨平台嵌入式中间件软件产品。MiniGUI的跨操作系统支持、可伸缩性及性能等方面的优势,鲜有同类产品可以媲美。飞漫软件将积蓄力量,为打造嵌入式系统软件领域的国产品牌而努力。近期,我们将在如下方面开展围绕MiniGUI的研发工作:

◆ MiniGUI已可在 Linux/uClinux、eCos、uC/OS-II、VxWorks等嵌入式操作系统中运行,还将支持更多的嵌入式操作系统。

◆ 所见即所得开发工具。飞漫软件将为MiniGUI用户提供界面设计工具,最终提供嵌入式产品的纯软件模拟平台和集成开发环境。

◆ 进一步丰富MiniGUI开源社区资源。我们将在现有资源基础上建立并维护若干开源项目,比如嵌入式浏览器、J2SE移植等。
阅读(604) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~