嵌入式系統的GUI分類及介紹——面向MCU微控制器
硬件平台的GUI
摘要:分析嵌入式系統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]。
參考文獻
[1] 陳俊彥. 嵌入式GUI設計[EB/OL].百度文庫,2019.05.28:10-11. https://wenku.baidu.com/view/3019a2a5cd7931b765ce0508763231126fdb7745.html.
[2] 21ic電子網. 工程師請進:MCU上跑的GUI,哪個最合你心意?[EB/OL].搜狐,2017.06.24. https://www.sohu.com/a/148171489_464086.
[3] 田三番. [中英字幕][STM32GUI][TouchGFX]TouchGFX圖形界面簡介,Demo展示[EB/OL].bili bili,2019.10.20.
https://www.bilibili.com/video/av71847495?from=search&seid=7751593998842112472.
[4] fssiiot. STM32H750B Discovery Kit 運行TouchGFX Demo例程[EB/OL]. Bili bili,2019.09.23.
https://www.bilibili.com/video/av68722775/?spm_id_from=333.788.videocard.0.
[5] 野火_firege. Embedded Wizard [J].2018.09.10.
https://www.bilibili.com/video/av31475329?from=search&seid=8773020113669252398.
[6] xxx. 基於chibios+ugfx的示波器demo演示[J].騰訊視頻, 2015.11.09.
https://v.qq.com/x/page/y0172o1pymx.html .
[7] anyuliuxing. 主流嵌入式開源GUI比較(二)[EB/OL].CSDN,2019.08.24. https://blog.csdn.net/anyuliuxing/article/details/99691721.
[8] xxx. 騰訊視頻, https://v.qq.com/txp/iframe/player.html?vid=n07811pocfx.
[9] 247153481. 一個新的嵌入式GUI [EB/OL].eeworld.2019.02.20.
http://bbs.eeworld.com.cn/thread-1069878-1-1.html .
[10] 許豆. 有哪些好的嵌入式操作系統界面庫(GUI library)?[EB/OL]. 知乎,2019.0.01. https://www.zhihu.com/question/20751611 .
[11] 悠然伴山居. freeRTOS+littlevgl的綜合demo[EB/OL].CSDN,2019.09.10. https://blog.csdn.net/duikui2371/article/details/100704602 .
[12] 悠然伴山居. 做了一個stm32+littlevgl的demo [EB/OL]. Bili bili,2019.09.09.
https://www.bilibili.com/video/av67166877/ .
[13] 阿里雲物聯網. AliOS Things圖形界面開發指南[EB/OL]. 阿里雲,2018.04.18.
https://developer.aliyun.com/article/582795.
[14] Zephyr. LittlevGL Basic Sample[EB/OL]. zephyrproject,2022.
https://docs.zephyrproject.org/latest/samples/subsys/display/lvgl/README.html?highlight=littlevgl.
