當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] μC/GUI是一種專為嵌入式應(yīng)用設(shè)計(jì)的通用圖形接口軟件。本文詳細(xì)介紹了μC/GUI的結(jié)構(gòu)框架和基于STM32平臺(tái)的μC/OS-II上的μC/GUI移植過(guò)程,并在此基礎(chǔ)上進(jìn)行圖形界面設(shè)計(jì);闡述了μC/GUI的窗口管

μCGUI是一種專為嵌入式應(yīng)用設(shè)計(jì)的通用圖形接口軟件。本文詳細(xì)介紹了μC/GUI的結(jié)構(gòu)框架和基于STM32平臺(tái)的μC/OS-II上的μC/GUI移植過(guò)程,并在此基礎(chǔ)上進(jìn)行圖形界面設(shè)計(jì);闡述了μC/GUI的窗口管理機(jī)制,提出了實(shí)現(xiàn)μC/GUI中文小型字庫(kù)的兩種方法并采用存儲(chǔ)設(shè)備解決了圖形顯示的閃爍問(wèn)題。

嵌入式系統(tǒng)的圖形用戶界面,要求具有占用資源少、性能高、可靠性高、可移植、可配置等特點(diǎn),μC/GUI就是這樣一種專門(mén)為嵌入式應(yīng)用設(shè)計(jì)的圖形用戶界面軟件。μC/GUI可應(yīng)用于多任務(wù)環(huán)境中,同時(shí)使用實(shí)時(shí)操作系統(tǒng)與μC/GUI,既可以發(fā)揮優(yōu)先級(jí)的實(shí)時(shí)性,又能實(shí)現(xiàn)良好的人機(jī)界面。本文使用Cortex-M3內(nèi)核的STM32平臺(tái),介紹了基于STM32平臺(tái)的μC/OS-II上的μC/GUI移植過(guò)程,并在此基礎(chǔ)上開(kāi)發(fā)了基于μC/GUI的圖形用戶界面。

1 μC/GUI結(jié)構(gòu)框架
1.1 μC/GUI的文件組織
μC/GUI軟件采用模塊化組織架構(gòu),其中較為重要的文件目錄是配置文件目錄Config和GUI庫(kù)文件目錄??紤]到未來(lái)升級(jí)方便,建議保持μC/GUI原有的目錄結(jié)構(gòu),這樣升級(jí)到新版本時(shí)只要覆蓋原文件目錄即可,而不會(huì)改變整個(gè)工程的文件路徑。
μC/GUI是一個(gè)源代碼開(kāi)放的圖形系統(tǒng),它提供了豐富的資源,包括二維繪圖庫(kù),多字體、可擴(kuò)充的字符集,UnICode,位圖顯示,多級(jí)RGB顏色管理及灰度處理調(diào)整機(jī)制,動(dòng)畫(huà)優(yōu)化顯示,具有Windows風(fēng)格的對(duì)話框和預(yù)定義控件(按鈕、編輯框、列表框、進(jìn)度條、單選復(fù)選框、滑動(dòng)條等);同時(shí),支持鍵盤(pán)、鼠標(biāo)、觸摸屏等輸入設(shè)備和雙LCD的輸出,提供占用極少RAM的窗口管理體系。各個(gè)子目錄的路徑及功能支持如表1所列。


1.2 μC/GUI的層次結(jié)構(gòu)
μC/GUI內(nèi)核提供多種圖形顯示功能,用戶程序通過(guò)API函數(shù)接口調(diào)用μC/GUI函數(shù)庫(kù)中的各個(gè)功能函數(shù),然后各個(gè)功能函數(shù)通過(guò)調(diào)用硬件驅(qū)動(dòng)實(shí)現(xiàn)圖形界面顯示。


一個(gè)典型的包含有μC/GUI的軟件系統(tǒng)可以理解為一個(gè)層次結(jié)構(gòu),詳細(xì)的μC/GUI軟件體系的層次結(jié)構(gòu)如圖1所示。

2 基于STM32平臺(tái)的μC/GUI移植
2.1 STM32F103系列單片機(jī)和移植平臺(tái)簡(jiǎn)介
硬件開(kāi)發(fā)平臺(tái)的核心是ST公司的STM32F103系列單片機(jī),實(shí)時(shí)操作系統(tǒng)選擇移植性較強(qiáng)的μC/OS-II。STM32F103系列單片機(jī)最高主頻為72 MHz;片內(nèi)多達(dá)51 2 KB的Flash并可以直接運(yùn)行程序,片內(nèi)還有64 KB的RAM;擁有眾多的定時(shí)器、中斷源和外設(shè),內(nèi)部集成了一個(gè)高速外部存儲(chǔ)器接口FSMC總線,可以很方便地控制液晶顯示模塊。目標(biāo)平臺(tái)的液晶模塊采用320×240分辨率,通過(guò)FSMC總線接口連接STM32F103單片機(jī),并在系統(tǒng)的內(nèi)存區(qū)開(kāi)辟一塊內(nèi)存作為液晶顯示的后臺(tái)緩存。
2.2 μC/OS-II上的μC/GUI移植
μC/GUI的移植內(nèi)容主要分成4部分:μC/GUI配置文件的參數(shù)修改,LCD驅(qū)動(dòng)程序的編寫(xiě),LCD觸摸屏驅(qū)動(dòng)程序編寫(xiě),以及與μC/OS-II操作系統(tǒng)相關(guān)接口部分的修改。
2.2.1 μC/GUI配置文件的參數(shù)修改
主要是根據(jù)系統(tǒng)的實(shí)際情況對(duì)GUI/Config目錄下3個(gè)配置文件的參數(shù)進(jìn)行修改,設(shè)計(jì)采用的LCD選用320×240的液晶顯示模塊,LCD控制器采用ili9320。
①LCDConf.h文件主要定義LCD控制器和顯示屏尺寸及可選擇的功能。修改如下:

2.2.2LCD驅(qū)動(dòng)程序的編寫(xiě)
LCD的驅(qū)動(dòng)程序在GUI/LCDDriver目錄下,在本次移植中編寫(xiě)的ili9320.c驅(qū)動(dòng)文件主要定義了GUI與LCD的硬件接口函數(shù),包括畫(huà)點(diǎn)、線、矩形、多邊形、位圖等二維圖形的函數(shù)等等。μC/GUI所有的系統(tǒng)函數(shù)都是通過(guò)調(diào)用這些硬件接口來(lái)實(shí)現(xiàn)其功能的,而這些接口函數(shù)又可以通過(guò)調(diào)用畫(huà)點(diǎn)函數(shù)來(lái)實(shí)現(xiàn),可以認(rèn)為幾乎所有的μC/GUI顯示功能都是通過(guò)最終調(diào)用畫(huà)點(diǎn)函數(shù)來(lái)實(shí)現(xiàn)的。所以筆者的LCD驅(qū)動(dòng)程序重點(diǎn)在畫(huà)點(diǎn)函數(shù)的編寫(xiě)。代碼如下:

2.2.3 LCD觸摸屏驅(qū)動(dòng)程序的編寫(xiě)
STM32F103通過(guò)SPI總線與觸摸屏芯片相連,通常的方法是采用輪詢的方法獲取觸摸屏的觸點(diǎn)動(dòng)作,這種方法不僅實(shí)時(shí)性差而且浪費(fèi)單片機(jī)的執(zhí)行周期。采用觸摸屏的觸點(diǎn)動(dòng)作通過(guò)外部中斷進(jìn)行檢測(cè),在中斷服務(wù)程序中獲取觸點(diǎn)的位置坐標(biāo),并通過(guò)調(diào)用函數(shù)GUI TOUCHStoreSta te(xScreen,yScreen),將觸點(diǎn)坐標(biāo)保存并通知μC/GUI。由于觸摸屏和LCD的大小不一定完全相等,坐標(biāo)原點(diǎn)的位置也可能不同,為了實(shí)現(xiàn)對(duì)應(yīng),需要進(jìn)行A/D轉(zhuǎn)換,實(shí)現(xiàn)數(shù)值到邏輯坐標(biāo)的轉(zhuǎn)換。
2.2.4 操作系統(tǒng)相關(guān)接口部分的修改
μC/OS-II操作系統(tǒng)下使用μC/GUI需要提供一些內(nèi)核接口函數(shù)來(lái)實(shí)現(xiàn)任務(wù)間同步。有了這些內(nèi)核接口函數(shù),就可以使μC/GUI運(yùn)行于μC /OS-II系統(tǒng)上,通過(guò)任務(wù)調(diào)度來(lái)實(shí)現(xiàn)各個(gè)任務(wù)之間的協(xié)調(diào)工作,接口函數(shù)實(shí)現(xiàn)如下:

至此,μC/GUI的移植就基本上完成了,需要編寫(xiě)測(cè)試用例,如果顯示效果不理想,再對(duì)移植的GUI進(jìn)行底層配置優(yōu)化和改進(jìn)。

3 μC/GUI的圖形界面設(shè)計(jì)
μC/GUI是具有類似Windows窗口風(fēng)格的圖形系統(tǒng),以其窗口作為內(nèi)存管理的基本單元,采用消息傳遞機(jī)制和回調(diào)函數(shù)機(jī)制。μC/GUI提供給窗口和窗口控件回調(diào)機(jī)制的背后,是一個(gè)事件驅(qū)動(dòng)標(biāo)志(即消息)?;卣{(diào)函數(shù)的過(guò)程也是消息傳遞的過(guò)程。
3. 1 μC/GUI的窗口管理機(jī)制
μC/GUI的窗口管理器用于管理LCD屏幕上圖形顯示的區(qū)域(即窗口),使其重疊、嵌套和并列。使用μC/GUI窗口管理時(shí),任何能顯示在顯示終端上的內(nèi)容都包含在一個(gè)窗口中,這個(gè)窗口是LCD屏幕上的一個(gè)給用戶畫(huà)圖或者顯示目標(biāo)的區(qū)域。窗口的創(chuàng)建、顯示以及刪除都離不開(kāi)消息傳遞和回調(diào)函數(shù)機(jī)制。
在μC/GUI中定義了數(shù)十種用于各類基本操作的消息宏,對(duì)每個(gè)窗口的操作都是通過(guò)向其對(duì)應(yīng)的回調(diào)函數(shù)傳送消息參數(shù)來(lái)完成的?;卣{(diào)函數(shù)是由用戶定義的,當(dāng)特定事件發(fā)生時(shí),指示圖形系統(tǒng)調(diào)用特定的函數(shù)。當(dāng)窗口的內(nèi)容發(fā)生改變時(shí),它們用來(lái)自動(dòng)重繪窗口。具體操作是通過(guò)一個(gè)指向函數(shù)的指針從窗口結(jié)構(gòu)體數(shù)據(jù)項(xiàng)中得到回調(diào)函數(shù)的首地址,并將消息作為參數(shù)調(diào)用該函數(shù)來(lái)完成的,回調(diào)函數(shù)在接收到消息后進(jìn)行相應(yīng)處理。
回調(diào)函數(shù)的基本作用是實(shí)現(xiàn)窗口刷新。一個(gè)簡(jiǎn)單的自動(dòng)更新窗口的回調(diào)函數(shù)如下:


3.2 μC/GUI實(shí)現(xiàn)中文小型字庫(kù)的兩種解決方法
μC/GUI帶有多種常用的ASCII字體,也支持UNICODE字符顯示,考慮到嵌入式系統(tǒng)內(nèi)存資源有限,沒(méi)有裝入漢字庫(kù),可以根據(jù)系統(tǒng)的實(shí)際需要建立一個(gè)小型漢字庫(kù),以解決漢字的顯示問(wèn)題。在μC/GUI下筆者提出兩種實(shí)現(xiàn)中文小型字庫(kù)的解決方法。
(1)在μC/GUI的字庫(kù)結(jié)構(gòu)體中建立一種新的字體
μC/GUI的文字顯示是通過(guò)查找字模的方式實(shí)現(xiàn)的。字庫(kù)中的每個(gè)文字都有其對(duì)應(yīng)的字模,所有的字模都是由GUI FONT和GUI FONT PORT這兩個(gè)結(jié)構(gòu)體來(lái)管理的。從漢字庫(kù)中選取必需的漢字組成字庫(kù),并將漢字對(duì)應(yīng)的不連續(xù)漢字機(jī)內(nèi)碼映射到一個(gè)連續(xù)區(qū)域。此時(shí)需要建立一個(gè)GUI_FONT_PROP結(jié)構(gòu)來(lái)管理所有的漢字。例如,要實(shí)現(xiàn)“設(shè)置”這2個(gè)字,具體的偽代碼如下:

(2)直接建立漢字庫(kù),通過(guò)LCD驅(qū)動(dòng)直接顯示漢字
該方法通過(guò)將漢字的機(jī)內(nèi)碼和漢字點(diǎn)陣組合成一個(gè)漢字字模結(jié)構(gòu)體,然后選取所必需的漢字,按照漢字字模結(jié)構(gòu)體的方式存放在漢字庫(kù)數(shù)組中,然后通過(guò)調(diào)用一個(gè)“漢字搜索函數(shù)”來(lái)搜索這個(gè)漢字庫(kù)數(shù)組的機(jī)內(nèi)碼即可確定相應(yīng)的漢字,并把漢字對(duì)應(yīng)的點(diǎn)陣通過(guò)LCD驅(qū)動(dòng)直接
進(jìn)行顯示。

上述的兩種方法都能在嵌入式的圖形界面中實(shí)現(xiàn)中文顯示,方法二為通過(guò)LCD驅(qū)動(dòng)直接顯示漢字,適合在窗體中顯示漢字,而不能在控件上直接顯示漢字。雖然可以用疊加的方法(即先畫(huà)一個(gè)控件,然后再在上面顯示漢字),但是這樣處理很不方便。方法一是在μC/GUI的字庫(kù)中建立了一種新的字體,因此在控件上顯示漢字時(shí)直接調(diào)用μC/GUI函數(shù)即可,不會(huì)出現(xiàn)上述問(wèn)題,因此筆者推薦使用方法一實(shí)現(xiàn)μC/GUI的中文小型字庫(kù)。
3.3 采用存儲(chǔ)設(shè)備解決圖形顯示的閃爍問(wèn)題
采用存儲(chǔ)設(shè)備可以有效地防止顯示屏在對(duì)有對(duì)象重疊的繪圖操作時(shí)的閃爍現(xiàn)象。沒(méi)有使用存儲(chǔ)設(shè)備時(shí),繪圖操作直接寫(xiě)屏,屏幕在繪圖操作執(zhí)行時(shí)更新,當(dāng)不同的更新在執(zhí)行時(shí)會(huì)產(chǎn)生閃爍。如果這樣的操作使用一個(gè)存儲(chǔ)設(shè)備的話,那么所有的操作在存儲(chǔ)設(shè)備內(nèi)執(zhí)行,具有無(wú)閃爍的優(yōu)點(diǎn)。μC/GUI的存儲(chǔ)設(shè)備是一個(gè)可選的軟件項(xiàng)目,為了優(yōu)化軟件的性能,提高圖形的顯示效果,需要采用存儲(chǔ)設(shè)備技術(shù)。μC/GUI中存儲(chǔ)設(shè)備的使用一般流程為建立存儲(chǔ)設(shè)備、激活、執(zhí)行繪圖操作將結(jié)果拷貝到顯示屏顯示,最后將創(chuàng)建的存儲(chǔ)設(shè)備刪除。

4 結(jié)論
為了驗(yàn)證移植丁作成功與否,需要建立一個(gè)多任務(wù)測(cè)試用例,這個(gè)用例由3個(gè)任務(wù)構(gòu)成:Main Task、GUITask、APP_Task。其中:Main_ Task任務(wù)用于設(shè)置背景窗口的回調(diào)函數(shù)和建立另外兩個(gè)任務(wù);APP_Task任務(wù)用于建立一個(gè)窗口并設(shè)置其相關(guān)的屬性;GUI_Task任務(wù)用于視窗管理和多級(jí)圖形畫(huà)面的切換。將測(cè)試用例燒寫(xiě)進(jìn)目標(biāo)板,目標(biāo)板采用神舟III號(hào)STM32開(kāi)發(fā)板,液晶屏為320×240像素的TFT型液晶屏幕。圖2為測(cè)試用例在目標(biāo)板上的運(yùn)行結(jié)果。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉