野人社区>工程案例>正文

嵌入式轻量级图形界面系统MinGUI

    MinGUI系统始于2006年。当时,东南大学ASIC工程中心实验室,芯片应用项目组着手开发一基于ARM7核的继电保护系统。作为电力系统的一种智能化保护装置,该设备要求有非常高的实时性。但是由于硬件资源的限制,并且继电保护算法本身极度销耗系统资源,使得对GUI的性能要求非常苛刻:要求有极低的CPU占有率、极高的响应及显示速度、高稳定性与可靠性。用当时现有的各类GUI(Grafix、ucgui等)作测试,发现GUI根本无法响应,因为CPU至少75%的时间被继电保护算法占了,GUI根本来不及调度与刷新。项目组成员便根据系统需求,专门开出了一个精简的、快速的、节省资源、高效率的GUI内核,这是MinGUI最初的由来。

    经过数十年的发展,MinGUI日趋完善稳定,始终定位于最小、最快、最省资源的宗旨,为低成本MCU服务。MinGUI的主要功能特色如下:

  • 支持2级灰度、4级灰度、16灰、256伪彩、16位真彩、24位真彩显示。

  • 高效的GDI绘图函数、每种色彩模式的GDI函数均作了有效的优化加速处理,并且所有GDI绘图函数输出时都自动通过单矩形剪切域。

  • 完善的贴图功能、支持BMP、JPEG类型。

  • 完善的窗体系统、支持窗体多矩形剪切域,支持窗口拖拽移动。

  • 支持12*12、16*16等各种点阵汉字的显示

  • 通用控件库:按钮、文本/图片标签、菜单、列表框、单行编辑器、多行编辑器,单选框、多选框等,所有控件支持透明选项

  • 支持拼音输入法

  • 数字键盘自动译码(10个数字键自动译码成26个字母的及各标点符号)。

  • 支持鼠标/触摸屏的。

  • 单独的GUI内存管理模块(Heap管理)

  • 不依赖操作系统。(没有操作系统也可运行)

  • 基于类以Win32的架构,从函数名到窗体机制、到消息机制几乎与win32一致。

  • 简单的图形设备抽像层接口GAL, 方便GUI外设的挂接实现。

  • 全部代码由标准C编写,承诺不改一行代码就可在各种支持标准C的平台上运行。

  • 提供独立进程的GUI模拟器(simu.exe),模拟器与GUI完全分开,在PC上通过VC++调试GUI代码时,可直接在独立进程的模拟器上看到GUI图形界面。


一、 MingGUI的资源占用情况

如下图所示:


二、基于 MinGUI 的嵌入式体系结构
    MinGUI优秀的可移植性,归功于其良好的软件架构,通过抽象层将 MinGUI 上层和底层操作系统隔离开来。如下图所示,基于 MinGUI 的应用程序一般通过 ANSI C 库、操作系统和驱动程序接口以及 MinGUI 自身提供的API 来实现自己的功能;MinGUI 中的“抽象层”将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关心底层的硬件平台输出和输入设备。



三、MinGUI 的通讯机制及运行模式
    MinGUI 下的通讯是一种类似于 Win32 的消息机制,线程间的消息传递模型如下图所示:

运行在 MinGUI上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行,用户可在任何一个线程中操作这些窗口。这种运行模式主要用来支持大多数传统意义上单进程的嵌入式操作系统,比如 VxWorks、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。当然,在 Linux 和 uClinux 上,MinGUI 也同样能以这种模式运行。MinGUI的多个线程中必须有一个线程充当GUI主线程,进行消息循环,循环读取消息队列中的消息,如果是键盘消息还要进行字符译码,并将最终消息派发给目标窗口处理。


四、MinGUI 的窗口系统
    在 MinGUI 中窗口组织为层次体系结构的形式。根窗口作为所有窗口的祖先,除了根窗口以外的所有窗口都有父窗口,每一个窗口都可能有子窗口、兄弟窗口、祖先窗口和子孙窗口等。在同一级的窗口可以相互重叠、相互剪切。

MinGUI 中有三种窗口类型:主窗口、对话框和控件窗口(子窗口)。主窗口通常包括一些子窗口,这些子窗口通常是控件窗口,也可以是自定义窗口类。应用程序还会创建其它类型的窗口,例如对话框和消息框。对话框本质上就是主窗口,应用程序一般通过对话框提示用户进行输入操作。


五、MinGUI 的PC端开发环境及模拟器

    MinGUI 的开发可以在Windows操作系统下进行。由于 MinGUI 完全用 C 来编写,具有非常好的移植性。MinGUI 应用程序在 Windows 下开发时,可以使用 Visual Studio或者C++Builder等集成开发环境进行GUI应用程序的开发及调试,并通过MinGUI模拟器实现显示与输入输出交互。MinGUI模拟器实际上是一个模拟了LcdFrameBuffer、Mouse/touchpad、Keyboard、Timer 等设备的Windows应用程序,也就是MinGUI与Windows操作系统、图形显示设备、键盘/鼠标等输入设备的抽象层接口。在程序开发时,完全可以把MinGUI模拟器当作嵌入式开发环境下的终端设备。MinGUI模拟器的界面如下图所示:
 

图  在MinGUI模拟器上运行GUI应用程序
直接在模拟器或控制台下运行调试 MinGUI 应用程序,大大方便了嵌入式程序的开发,避免了用户重复刷写嵌入式设备的工作。同时也使得用户可以在开发主机上使用标准的调试器对应用程序进行调试。

同样是Hello world程序,本段程序注册了一个自定义的HelloWorld的窗口类(控件),并创了该类的一个窗口实例,然后通过消息循环运行窗口实例。 本例的编程模式正是MinGUI应用程序最常用的写法。编写一个MinGUI应用程序,其实是编写一个或多个自定义类的过程,最后通过CreateWindow把这些类实例化,并通过消息循环运行起来。
这种GUI对窗口类的封装机制可能让我们联想到C++对类的封装,虽然形式、方法和效果不同,但是,用C语言实现的这种封装效果已经让我们感到了欣慰,因为这种封装机制,可以让我们在开发基于C语言的GUI应用程序时,可以非常清晰的将复杂应用程序各功能块分割与整合,可以很大程度上的提高应用程序的并行开发速度,同时也便于各个模块的测试与维护。


六、MinGUI 的其它演示测试界面



七、MinGUI解决方案

    MinGUI主要应用于低成本的嵌入式解决方案中,以求在最低的系统资源前提下得到最优化的GUI性能。在此类应用中,MinGUI提供了很好的解决方案。MinGUI 目前主要最主要的应用领域有:

(1) 中低端手机、商务话机、PDA类产品

(2) 工业仪表及控制系统

广告
广告位
了解详情
广告
广告位
了解详情
©版权所有: 南京云想物联网科技有限公司   苏ICP备20013807号     联系我们