當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于Linux的輕量級(jí)嵌入式GUI系統(tǒng)及實(shí)現(xiàn)

1、引言

近年來(lái),隨著信息家電、手持設(shè)備、無(wú)線設(shè)備的迅速發(fā)展,人們對(duì)嵌入式系統(tǒng)的需求逐漸增多,要求也越來(lái)越高。這使為嵌入式系統(tǒng)提供一個(gè)友好方便、穩(wěn)定可靠的G UI系統(tǒng)成為非常緊迫要求[5]。嵌入式技術(shù)是當(dāng)前微電子與計(jì)算機(jī)技術(shù)中的一個(gè)重要分支[1], 它是指以應(yīng)用為中心, 以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件、硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等的嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)[2]。常用的PC機(jī)上的GU I因嵌入式設(shè)備對(duì)資源的嚴(yán)格要求顯得過(guò)于龐大,而不適合嵌入式系統(tǒng)[6]。與普通環(huán)境下的GUI 系統(tǒng)相比較.嵌入式環(huán)境下的GUI 系統(tǒng)要求輕型、占用資源少、高性能、高可靠性、可配置等。同時(shí),由于嵌入式環(huán)境的多樣性,跨平臺(tái)、高移植性也是嵌入式GUI系統(tǒng)必須具備的特點(diǎn)。

盡管嵌入式系統(tǒng)對(duì)GUI 的需求越來(lái)越明顯,但目前GUI的實(shí)現(xiàn)方法各有不同,主要有二種; 第一種方法是某些大型廠商針對(duì)自身需要自主開(kāi)發(fā)滿足自身需要的GUI 系統(tǒng);第二種方法是某些廠商使用某些比較成熟的GUI系統(tǒng)。對(duì)于大部分廠商來(lái)說(shuō),第二種方法不失為一個(gè)省時(shí)省力、又可取得較好效果的方法。

2 GUI 系統(tǒng)發(fā)展概況

目前國(guó)內(nèi)外已經(jīng)推出了很多基于Linux的GUI產(chǎn)品, 比較成熟的面向嵌入式的GUI 系統(tǒng)有QtEmbedded 、MicroWindows 、MiniGUI 、WinCE 等[4]。

1)Microwindows 是一個(gè)公開(kāi)源碼(LGPL)的項(xiàng)目。它致力于為一些小型的設(shè)備和平臺(tái)提供現(xiàn)代圖形窗口環(huán)境的一些特性,其主要特色是一個(gè)基于客戶/服務(wù)器體系結(jié)構(gòu)的GUI 系統(tǒng),采用了面向硬功件的驅(qū)動(dòng)程序?qū)?、?duì)硬件的接口層、向高層操作系統(tǒng)的API 層的三層體系結(jié)構(gòu)。并提供了相對(duì)完善的圖形功能, 以及一些其他較高級(jí)的功能,比如Alpha 混合、三維支持、TrueType 字體支持等。但是有如下缺點(diǎn):無(wú)任何硬件加速能力,圖形引擎中存在許多低效算法,且代碼質(zhì)量較差。

2)MiniGUI是在Linux 控制臺(tái)上運(yùn)行的,基于SVGALib 和LinuxThread 庫(kù)的多窗口圖形用戶界面支持系統(tǒng)。主要特色是基于線程來(lái)編寫,所有的應(yīng)用研究程序都運(yùn)行在同一個(gè)地址空間,這樣可以提高系統(tǒng)的效率。底層增加了圖形抽象層GAL 和基于輸入設(shè)備的輸入抽象層作為提供底層Linux 控制臺(tái)或者XWindow 上的圖形接口以及輸入接口。但是API沒(méi)有封裝,不便移植,功能限制其不能用于更大的嵌入式系統(tǒng)。

3)Qt/Embedded 是著名的Qt庫(kù)開(kāi)發(fā)商Trolltech 公司開(kāi)發(fā)的,是一個(gè)專門為嵌入式系統(tǒng)設(shè)計(jì)的圖形用戶界面工具包。它的主要特點(diǎn)是可移植到不同平臺(tái)上、擁有自己的窗口系統(tǒng)、擁有自己強(qiáng)大的開(kāi)發(fā)工具和編程接口、提供壓縮字體格式、支持Unicode, 可以輕松地使程序支持多種語(yǔ)言。但是Qt/Embedded 不是免費(fèi)的,使用者必須支持license 費(fèi)用。

4)OpenGL 采用LGPL 條款發(fā)布。OpenGUI 比較適合于基于x86 平臺(tái)的實(shí)時(shí)系統(tǒng),基于匯編實(shí)現(xiàn)的內(nèi)核,并利用MMX 指令進(jìn)行了優(yōu)化使其運(yùn)行速度快,但可移植性稍差。

這幾種GUI 的設(shè)計(jì)目標(biāo)仍然是通用性,它們大多支持多窗口的隨意切換、覆蓋,以及可移動(dòng)、可動(dòng)態(tài)改變尺寸的窗口,諸如此類在多數(shù)嵌入式應(yīng)用中幾乎永遠(yuǎn)用不到的特性,使得應(yīng)用程序的開(kāi)發(fā)要考慮很多不必要的細(xì)節(jié)[5]。

以上的嵌入式GUI 系統(tǒng)已很成熟,但是對(duì)于一些需求自主開(kāi)發(fā)輕型、功能簡(jiǎn)潔、專用性強(qiáng)GUI 系統(tǒng)的用戶來(lái)說(shuō),以上的產(chǎn)品并不是一個(gè)很好的選擇。以上的GUI 系統(tǒng)一部分是收費(fèi)的商業(yè)產(chǎn)品,另外是通用的GUI功能系統(tǒng),對(duì)硬件資源非??粗氐那度胧较到y(tǒng)來(lái)說(shuō),多余無(wú)用的功能浪費(fèi)硬件資源絕不是好的選擇。本文針對(duì)開(kāi)發(fā)小型專用的嵌入式GUI 系統(tǒng)進(jìn)行了研究,實(shí)現(xiàn)專用的GUI 系統(tǒng)的開(kāi)發(fā)。

3 輕量級(jí)GUI 的設(shè)計(jì)與實(shí)現(xiàn)嵌入式GUI 系統(tǒng)采取分層設(shè)計(jì)的結(jié)構(gòu),對(duì)不同層次進(jìn)行封裝。在最低層建立了硬件抽象層(HAL,Hard Abstract Layer),為基于圖形顯示設(shè)備(如VGA 卡)的圖形抽象層(Graphic Abstract Layer,GAL)和基于輸入設(shè)備(如鍵盤、觸摸屏等)的輸入抽象層(Input Abstract Layer,IAL) 。圖形抽象層GAL 建立在各種流行的繪圖引擎之上,屏蔽各種繪圖引擎的具體實(shí)現(xiàn),對(duì)上層提供統(tǒng)一的底層繪圖接口。輸入抽象層IAL建立在各硬件設(shè)備驅(qū)動(dòng)程序之上,屏蔽各種不同的輸入設(shè)備硬件實(shí)現(xiàn),對(duì)上層提供統(tǒng)一的應(yīng)用輸入接口;圖形引擎通過(guò)FrameBuffer 來(lái)獲得,而輸入設(shè)備的處理卻沒(méi)有統(tǒng)一的接口。在PC上,通常使用鍵盤和鼠標(biāo),而在嵌入式系統(tǒng)上, 可能只有觸摸屏或?yàn)閿?shù)不多的幾個(gè)鍵,在這種情況下,提供一個(gè)抽象輸入層就顯得格外重要。圖形設(shè)備接口(GDI,Ggraphic Device Interface) 建立在圖形抽象層之上,主要包括點(diǎn)、線、面、文本、的繪制等功能。圖形用戶接口及相關(guān)API則建立在圖形設(shè)備接口之上,實(shí)現(xiàn)消息隊(duì)列、窗口、控件以及應(yīng)用程序管理等各種功能。系統(tǒng)的層次結(jié)構(gòu)如圖1所示。

3.1 嵌入式LIGHT GUI系統(tǒng)層次結(jié)構(gòu)[!--empirenews.page--]


GAL 層完成系統(tǒng)對(duì)具體的顯示硬件設(shè)備的操作, 極大程度上隱藏各種不同硬件的技術(shù)實(shí)現(xiàn)細(xì)節(jié),為應(yīng)用程序開(kāi)發(fā)人員提供統(tǒng)一的圖形編程接口。IAL 層則需要實(shí)現(xiàn)對(duì)于各類不同輸入設(shè)備的控制操作,提供統(tǒng)一的調(diào)用接口。GAL 層與IAL 層的設(shè)計(jì)屏蔽了底層硬件的多樣性,可以極大程度地提高嵌入式GUI 的可移植性。另外利用GAL 可大大提高GUI 的可移植性,并且使程序的開(kāi)發(fā)和擴(kuò)展變得更加容易。圖形抽象層使用GFX 數(shù)據(jù)結(jié)構(gòu)來(lái)表示圖形引擎系統(tǒng);系統(tǒng)通過(guò)輸入設(shè)備層將底層的各種設(shè)備統(tǒng)一映射成上層應(yīng)用程序支持的兩種基本輸入設(shè)備——鼠標(biāo)設(shè)備和鍵盤設(shè)備。對(duì)于具體的硬件設(shè)備,只要根據(jù)驅(qū)動(dòng)程序提供的接口,編寫程序?qū)崿F(xiàn)相應(yīng)的抽象接口,就能將各種設(shè)備模擬成為鼠標(biāo)或者鍵盤進(jìn)行輸入。

系統(tǒng)通過(guò)維護(hù)一個(gè)已注冊(cè)圖形引擎數(shù)組,保存每個(gè)圖形引擎數(shù)據(jù)結(jié)構(gòu)的指針。系統(tǒng)利用一個(gè)指針保存當(dāng)前使用的圖形引擎。每個(gè)圖形引擎的數(shù)據(jù)結(jié)構(gòu)定義了該圖形引擎的一些信息,實(shí)現(xiàn)GAL 所定義的各個(gè)接口,包括初始化和終止、畫點(diǎn)處理函數(shù)、畫線處理函數(shù)、矩形框填充函數(shù)、調(diào)色板函數(shù)等。

3.2 圖形設(shè)備接口(GDI) 圖形設(shè)備接口是建立在圖形抽象層上的一個(gè)獨(dú)立的繪圖應(yīng)用接口,它將圖形抽象層提供的接口功能進(jìn)一步封裝和擴(kuò)充,向更高層的應(yīng)用程序提供使用更為簡(jiǎn)便,功能完善的繪圖功能。lightGUI 采用了Windows 類似于Windows 中的GDI 模塊。它提供設(shè)備上下文(Device Context) 操作、基本GDI 對(duì)象操作(包括畫筆、畫刷、字體、位圖、區(qū)域等)。在該系統(tǒng)中,設(shè)備上下文的定義采用如下數(shù)據(jù)結(jié)構(gòu):typedef struct  gdi_DC{ int DrawPointx; int DrawPointy; int DrawOrgx; int DrawOrgy; int DrawRangx; int DrawRangy; int DrawRop; COLORREF BackColor;

COLORREF FontColor;
}DC,*PDC 

系統(tǒng)中設(shè)置和設(shè)備上下文主要的API 如表所示
CreateDC(): 創(chuàng)建新的設(shè)備上下文
DispatchDC(PDC):釋放設(shè)備上下文
GetDrawDes (PDC,POINT*): 獲取設(shè)備上下繪圖坐標(biāo)原點(diǎn)
GetDrawRange(PDC,POINT*):獲取上下文繪圖坐標(biāo)范圍
GetBackColor(PDC,int* ):獲取上下文繪圖背景色

3.3 消息驅(qū)動(dòng)機(jī)制的設(shè)計(jì)實(shí)現(xiàn)系統(tǒng)的基本通信機(jī)制是事件驅(qū)動(dòng)消息機(jī)制。系統(tǒng)線程與系統(tǒng)中所有的窗口擁有自己的消息隊(duì)列。系統(tǒng)線程,該隊(duì)列中存放所有從底層輸入設(shè)備接收到的各類控制消息,等待系統(tǒng)線程分配到應(yīng)用程序窗口;系統(tǒng)中所有的窗口私有消息隊(duì)列用來(lái)存放發(fā)送到該窗口的所有消息,等待窗口進(jìn)一步處理。在系統(tǒng)中消息分為四類:系統(tǒng)消息、外部時(shí)間消息、窗口菜單消息、窗口控件消息。在消息驅(qū)動(dòng)的應(yīng)用程序中,外設(shè)發(fā)生的事件(例如鍵的敲擊)都由支持系統(tǒng)收集,將其以事先約定格式翻譯為特定的消息。應(yīng)用程序一般包含有自己的消息隊(duì)列,系統(tǒng)將消息發(fā)送到應(yīng)用程序的消息隊(duì)列中。應(yīng)用程序可以建立一個(gè)循環(huán),在這個(gè)循環(huán)中讀取消息并處理消息,直到特定的消息傳來(lái)為止。當(dāng)窗口沒(méi)有消息可處理時(shí),消息循環(huán)處理阻塞狀態(tài),這時(shí)不消耗CPU 資源。在GUI 中應(yīng)用程序處理消息隊(duì)列中的消息分為GetMessage()從消息隊(duì)列中獲取消息。GetMe

ssage()函數(shù)有2個(gè)參數(shù),一個(gè)用來(lái)存放接收到的消息數(shù)據(jù),另一個(gè)是應(yīng)用程序主窗口句柄。當(dāng)獲得一個(gè)消息時(shí),會(huì)將該消息的目標(biāo)窗口確認(rèn)為應(yīng)用程序主窗口。如果收到的消息不是MSG_QUIT

3.4 窗口的設(shè)計(jì)實(shí)現(xiàn)窗口管理模塊支持多窗口的同時(shí)顯示,可進(jìn)行窗口的創(chuàng)建、移動(dòng)、大小調(diào)整等操作。窗口設(shè)計(jì)中包括主窗口、窗口菜單、窗口控件、窗口主過(guò)程和窗口相關(guān)的API函數(shù)。在設(shè)計(jì)中對(duì)每個(gè)窗口都采用自身的主過(guò)程來(lái)完成自身消息的處理工作3.5  控件層(Controls) 控件層是窗口的子窗口。這些子窗口的行為與主窗口一樣,既能夠接收鍵盤和鼠標(biāo)等外部輸入,也可以在自己的區(qū)域內(nèi)進(jìn)行輸出,只是其所有活動(dòng)被限制在主窗口中??丶釉O(shè)計(jì)實(shí)現(xiàn)了基本控件,包括按鈕、靜態(tài)文本框、單選(多選)框、繪圖框等多種通用控件。控件層充分挖掘了基本窗口系統(tǒng)的潛力。向用戶提供最常用的功能,極大地簡(jiǎn)化用戶開(kāi)發(fā)的過(guò)程。

 4 結(jié)束語(yǔ)

本文介紹了嵌入式圖形用戶界面系統(tǒng)的基本架構(gòu)和實(shí)現(xiàn)原理,提出了嵌入式環(huán)境下自主、輕型、占用資源少可配置的GUI 系統(tǒng)的解決方案。輕量級(jí) GUI 系統(tǒng)已在Linux 系統(tǒng)上測(cè)試通過(guò)。本文所開(kāi)發(fā)所采用的體系結(jié)構(gòu)以及面向?qū)夹g(shù)對(duì)窗口用戶控件的開(kāi)發(fā)極大的提高了開(kāi)發(fā)效率和代碼的重用率,對(duì)開(kāi)發(fā)自主的GUI 系統(tǒng)有一定的借鑒和參考價(jià)值。本文作者創(chuàng)新點(diǎn):利用Linu x開(kāi)發(fā)平臺(tái),研發(fā)適用于小型嵌入式系統(tǒng)的專用GUI系統(tǒng),使用層次結(jié)構(gòu)和面向?qū)ο蟮目丶_(kāi)發(fā)技術(shù),縮短開(kāi)發(fā)周期,降低開(kāi)發(fā)成本,為嵌入式GUI系統(tǒng)的開(kāi)發(fā)提供結(jié)開(kāi)發(fā)方法的參考。

本站聲明: 本文章由作者或相關(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日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

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

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

關(guān)鍵字: 汽車 人工智能 智能驅(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)閉