摘要:分析嵌入式系统GUI选型时需要考虑的问题,简要介绍目前嵌入式系统使用的ToughGFX、emWin、Embedded Wizard、uGFX、LittlevGL、MiniGUI(飞漫)、AWTK(周立功)、Microwindows、OpenGUI、Qt for MCU等10款国内外的GUI。
关键字:嵌入式GUI;ToughGFX;uGFX;LittlevGL
1 GUI选型
GUI(Graphical User Interface,图形用户界面)是指采用图形方式显示的用户操作界面,小型的嵌入式系统不同于桌面级的Windows、Linux显示、也不同于移动终端(手机、平板)上的Android、IOS显示。小型嵌入式系统的GUI通常可能是定制的,要显示的内容比较有限,也没有复杂、丰富的应用。而且小型嵌入式系统的硬件平台通常是MCU(Microcontroller Unit,微控制器),显示时没有GPU、3D渲染等硬件单元,也无法运行大型操作系统,桌面级和移动端的成熟GUI无法与其适配,也无法在这类系统上运行。
笔者认为,小型嵌入式系统GUI选型时需要考虑如下几个问题:
1) 应用场景,主要需要显示什么,显示的是否复杂。
2) 与使用的操作系统的结合,移植难度。
3) 硬件平台,是否已经有现成可用的GUI与其适配。
4) GUI的开源协议,是否收费。
2 常见的嵌入式GUI
文献[1]中将GUI分为低端(ucGUI、RTThread的柿饼UI),中端(miniGUI、OPENGUI、Microwindows),高端(桌面级的QT、Android、Windows MFC)三类。查阅了这些GUI的资料[2],简要列举如下:
1) TouchGFX
如果是ST的硬件平台,则几乎是必选它。
2) emWin、Embedded Wizard
emWin比较老,不支持复杂控件,收费;Embedded Wizard也收费。
3) ugfx,LittlevGL
uGFX完全免费,LittlevGL是开源免费(MIT许可)的GUI。
4) miniGUI(飞漫),AWTK(周立功)
这两个是国内的。
5) Microwindows,OPENGUI,Qt forMCU。
这三个感觉一版不予考虑。
2.1 TouchGFX
非开源;以界面华丽,流畅以及强劲的 TouchGFX Designer著称;界面非常炫,堪比手机的APP界面。已经被ST收购,在ST MCU、MPU上可免费使用。视频[3]展示了TouchGFX图形界面简介,Demo展示,视频[4]展示了STM32H750B Discovery Kit,运行TouchGFX Demo例程。
使用TouchGFX开发STM32界面,有两种方法。
一是利用TouchGFX Designer软件,支持图片和控件拖拽、可快速生成在KEIL或IAR等IDE中可打开的项目工程;
另一种方法是,STM32CUBEMX 5.0版本增加了对TouchGFX的支持,可以使用CubeMX开发TouchGFX应用。
笔者曾经试图将TouchGFX的闭源库,移植到其它的操作系统上,出现点问题,移植中断了,详情参见我的另外一篇随笔《TouchGFX undefined reference to `touchgfx::HAL::blockCopy(void, void const, unsigned int)' ——记一次arm-none-eabi-g++ 链接时找不到静态库中对应的函数,学习GNU C++的符号改编机制》 。
2.2 emWin(uCGUI,STemWin)
老牌的嵌入式 GUI 了,有着十几年的历史,软件架构和功能比较成熟了。主要是SEGGER(没错就是做仿真器的那个)来开发和维护。但是做出来比较炫的效果非常麻烦,且不支持较为复杂的控件。
ucGUI是Segger公司为Micrium公司(ucos所属公司)定制的emWin,使用的时候都需要向该公司交纳版权费。
而STemWin是Segger公司为ST公司定制的emWin;如果我们使用的ST的芯片,则可以免费使用STemWin。
2.3 Embedded Wizard
德国TARA System公司开发的一个使用舒适、灵活的嵌入式系统GUI开发工具。出现较晚,在emWin和TouchGFX之后,以华丽,流畅的界面和强劲的GUIBuilder 著称。
官方号称支持几乎任意平台。也是要收费的。
视频[5]展示了在STM32F746G-DISCO开发板上,运行基于Embedded Wizard开发的界面应用。
2.4 uGFX
界面效果不像TouchGFX那么华丽,不过功能也是简单实用。同样它也有一款不错的GUIBuilder。
值得一提的是这是一款完全免费的GUI。
视频[6]展示基于chibios和ugfx开发的示波器demo演示。
2.5 Microwindows
是一个著名的开放式源码嵌入式GUI 软件,遵循MPL协议,目的是把图形视窗环境引入到运行Linux的小型设备和平台上。
2.6 OpenGUI
OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口。
OpenGUI比较适合于基于x86平台的实时系统,跨平台的可移植性较差,目前发展较慢。
2.7 MiniGUI
开源Linux图形用户界面支持系统,跨操作系统支持,具体包括普通嵌入式 Linux/uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX、Nucleus、OSE 等,同时还提供 Win32 平台上的 SDK 开发包,方便嵌入式应用程序的开发和调试。
并且非常适合 eCos/uCOS-II/ThreadX 等无文件系统支持的实时嵌入式操作系统。
2.8 AWTK
AWTK[7]是ZLG集团旗下致远电子开源的GUI引,对标QT?
视频[8]展示了AWTK的一些基本控件。
在嵌入式Linux系统上也极具优势,也能能很好的解决嵌入式Linux GUI开发的大多数痛点。也支持STM32系列[9]。
2.9 Qt for MCU
Qt for MCU 将能够在没有操作系统的设备上运行,允许开发人员在具有成本效益的单片机上创建流畅的用户界面,基于 Qt 的应用程序现在可以部署在运行传统操作系统的系统以及基于 ARM Cortex M7 的微控制器上[10]。基于 ARM Cortex M7 的微控制器上,发布了1.0,目前支持如下硬件:
STM32F769i-DISCO,STM32F7508-DK
I.MX RT1050-EVKB
Renesas RH850
2.10 LittlevGL
LittlevGL是一个开源免费(MIT许可)的GUI。Flash大于64KB,RAM大于20KB的单片机都可以使用。
网址[11]和视频[12]展示了,与FreeRTOS结合,运行的一些Demo。
国内的阿里AliOS Things图形界面,也是基于LittleVGL[13]。
Zephyr OS的显示Demo,也是基于LittlevGL[14]。
|