目前主流的嵌入式GUI開發技術中,RT-Thread/Persimmon、TouchGFX和emWin是最受人矚目的。
 
  RT-Thread/ Persimmon是國內主導開發的實時線程操作系統RT-Thread中的圖形用戶界面,是一款面向嵌入式系統的,具備多窗口、多線程的,類似Android界面效果的C++ GUI,構建於RT-Thread物聯網操作系統之上。目前也已經發展到了RT-Thread/Persimmon 2.0,支持設計器及腳本方式開發。
 
  盡管稍遜於安卓系統顯示效果,但其資源占用率相比Linux方案低一個數量級,比安卓系統更是低幾個數量級,成本也不高,適用於基於arm Cortex-M7/M4內核MCU、基於arm 9/arm 11/Cortex-A7內核的應用處理器/AI芯片之上。目前在NXP、全志等芯片上均有采用RT-Thread/Persimmon產品,在智能家居、樓宇自動化系統/設備以及音視頻系統中得到了廣泛應用。
 
  emWin是由德國Segger公司針對嵌入式平台開發的穩定、高效的圖形軟件庫,屬於老牌的嵌入式GUI,有着十幾年的歷史,軟件架構和功能比較成熟。通過調用emWin提供的函數接口,開發嵌入式圖形界面應用變得簡單而快捷,但顯示效果偏Win95/Win98風格。
 
  TouchGFX是一個采用C++語言編寫的軟件框架,可為嵌入式GUI提供出色的圖形和流暢的動畫,資源和功耗需求也很低,是RT-Thread/Persimmon的主要競爭對手。美中不足的是TouchGFX開發易用性較差,開發周期性長,而且其供應商Draupner Graphics已於今年7月被意法半導體(ST)所收購。
 
  RT-Thread創始人兼睿賽德電子科技總經理熊譜翔在接受《電子工程專輯》獨家專訪時表示,RT-Thread原有的以C語言模擬面向對象技術進行開發的RTGUI在代碼簡潔性、可讀性和實用性上難以滿足需求——簡單來說,由觸控GUI帶來的面向對象需求,雖然使用C語言能夠實現,但太過繁瑣、復雜,和公司一直以來追求的簡潔之美背道而馳。思考再三,他們決定依照現代化GUI風格重寫GUI組件,即以C++為基礎,支持多點觸摸,提供類似signal/slot信號槽的使用方式,包括各種動畫特效等。而這一支持界面動畫效果的全新GUI,RT-Thread將其稱之為柿餅(Persimmon) UI。
 
不一樣的柿餅
  考慮到GUI已經成為人與機器溝通的橋梁,且嵌入式系統對GUI的需求越來越高,而這一切均要求有一個輕型、占用資源少、高性能、高可靠、可配置及美觀的GUI支持。
 
  如前文所述,Persimmon是以C++編寫的,因為GUI上的一系列控件以C++面向對象的方式來描述會更合理,例如一個button,一個label,一個image,每個對象有他們自己的屬性、方法等。當然C++也會帶來一些問題,比如調試困難,開發周期長。為了某一效果,代碼反復迭代不說,做出來的UI效果還不像安卓、iOS那樣炫麗,千篇一律等。
 

 

1.jpg

Persimmon GUI結構框圖
 
  熊譜翔說,在這類傳統GUI開發過程中,他們發現開發人員面臨的痛點除了調試困難外,學習成本高,上手難度大,各種繪圖API讓人頭大。更要命的是,UI一旦確定,后期維護困難,無法升級。 
 
  為了最大程度地降低上手難度,柿餅UI對原來的Persimmon 1.0版本進行了升級,變成了2.0版本,並把復雜的UI效果都封裝成一個個的控件,同時對控件的配置要求降到最低。設計人員只需通過拖 - 擺 - 輕配,就能完成整個UI效果的設計,所見即所得。目前,柿餅UI設計器支持21個控件,不僅覆蓋了開發者日常基本的需求,還有“旋轉木馬”這樣具備炫酷特效的控件。
 
  同時,柿餅UI也強調快捷的開發方式,采用了美工+“前端”模式的設計理念,類似前端的小程序編程,使用JavaScript腳本語言來編寫用戶業務邏輯。也就是說,在美工准備好素材的前提下,設計人員只需通過柿餅UI設計器設計好UI框架,再通過JavaScript腳本語言,只需幾行代碼就可以實現控件間復雜的事件傳遞,行為響應等。這種做法,可將調試時間從之前的2-3個月大幅縮短至1周左右,開發者只需把精力集中在邏輯控制上即可,極大提升了開發效率。同時,柿餅UI設計器支持板級效果仿真,在PC端仿真的同時就能體驗到真機運行的效果。效果滿意后,開發人員可以在設計器內通過USB一鍵下載到設備,非常方便。
 

2.jpg

傳統GUI和柿餅GUI對比圖
 
作為中國人自己開發的GUI,尊重國人的開發體驗是RT-Thread的頭等大事。鄒誠說,希望不管是控件的配置細節,還是軟件的使用體驗,都能夠最大程度迎合用戶的使用習慣,讓大家一看就會,一用就能出成品,最大程度的降低開發難度和成本。
 
柿餅GUI支持對底層硬件的C/C++拓展。用戶可以通過native C/C++ SDK生成動態鏈接庫.so文件,加載到柿餅GUI內,然后就可以通過JS代碼直接調用該動態庫控制底層硬件了。而在設備聯網的情況下,還可以通過OTA遠程升級維護固件、UI應用等,擺脫了此前設計一旦定稿量產后,很難再對UI進行升級或者改動的尷尬。
 
針對有用戶質疑柿餅UI並未開放出全部代碼的做法,鄒誠解釋稱,RT-Thread操作系統的推廣與生態系統搭建仍然是公司的核心戰略,開源免費是前提,這是毋庸置疑的。因此,工程師可以從官網上下載90%以上的相關資源。但是,考慮到公司的研發投入和代碼使用維護的難度,確實有少數組件沒有實現開源,需要與相關企業展開授權合作。
 
“相關企業自主開發GUI,或是尋找第三方替代方案目前來看都是不現實的,因為GUI控件的開發難度非常高。所以用戶對於收費模式其實並不反感,但前提是我們必須要能夠提供易開發、效果好、資源占用率低的高品質產品。”熊譜翔補充說。“我們正在計划推出高性價比的標准硬件模塊,中小型客戶可以直接內置於他們的終端當中,通過我們提供的UI設計器等工具,快速開發出帶有酷炫GUI圖形顯示的產品”。