《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Linux的輕量級嵌入式GUI系統及實現
基于Linux的輕量級嵌入式GUI系統及實現
微計算機信息
趙英濤 柳翠寅 張春宇
摘要: 基于Linux的輕量級嵌入式GUI系統及實現,1、引言近年來,隨著信息家電、手持設備、無線設備的迅速發展,人們對嵌入式系統的需求逐漸增多,要求也越來越高。這使為嵌入式系統提供一個友好方便、穩定可靠的G UI系統成為非常緊迫要求[5]。嵌入式技術是當前微電
Abstract:
Key words :

1、引言

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

盡管嵌入式系統對GUI 的需求越來越明顯,但目前GUI的實現方法各有不同,主要有二種; 第一種方法是某些大型廠商針對自身需要自主開發滿足自身需要的GUI 系統;第二種方法是某些廠商使用某些比較成熟的GUI系統。對于大部分廠商來說,第二種方法不失為一個省時省力、又可取得較好效果的方法。

2 GUI 系統發展概況

目前國內外已經推出了很多基于Linux的GUI產品, 比較成熟的面向嵌入式的GUI 系統有QtEmbedded 、MicroWindows 、MiniGUI 、WinCE 等[4]。

1)Microwindows 是一個公開源碼(LGPL)的項目。它致力于為一些小型的設備和平臺提供現代圖形窗口環境的一些特性,其主要特色是一個基于客戶/服務器體系結構的GUI 系統,采用了面向硬功件的驅動程序層、對硬件的接口層、向高層操作系統的API 層的三層體系結構。并提供了相對完善的圖形功能, 以及一些其他較高級的功能,比如Alpha 混合、三維支持、TrueType 字體支持等。但是有如下缺點:無任何硬件加速能力,圖形引擎中存在許多低效算法,且代碼質量較差。

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

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

4)OpenGL 采用LGPL 條款發布。OpenGUI 比較適合于基于x86 平臺的實時系統,基于匯編實現的內核,并利用MMX 指令進行了優化使其運行速度快,但可移植性稍差。

這幾種GUI 的設計目標仍然是通用性,它們大多支持多窗口的隨意切換、覆蓋,以及可移動、可動態改變尺寸的窗口,諸如此類在多數嵌入式應用中幾乎永遠用不到的特性,使得應用程序的開發要考慮很多不必要的細節[5]。

以上的嵌入式GUI 系統已很成熟,但是對于一些需求自主開發輕型、功能簡潔、專用性強GUI 系統的用戶來說,以上的產品并不是一個很好的選擇。以上的GUI 系統一部分是收費的商業產品,另外是通用的GUI功能系統,對硬件資源非常看重的嵌入式系統來說,多余無用的功能浪費硬件資源絕不是好的選擇。本文針對開發小型專用的嵌入式GUI 系統進行了研究,實現專用的GUI 系統的開發。

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

3.1 嵌入式LIGHT GUI系統層次結構


GAL 層完成系統對具體的顯示硬件設備的操作, 極大程度上隱藏各種不同硬件的技術實現細節,為應用程序開發人員提供統一的圖形編程接口。IAL 層則需要實現對于各類不同輸入設備的控制操作,提供統一的調用接口。GAL 層與IAL 層的設計屏蔽了底層硬件的多樣性,可以極大程度地提高嵌入式GUI 的可移植性。另外利用GAL 可大大提高GUI 的可移植性,并且使程序的開發和擴展變得更加容易。圖形抽象層使用GFX 數據結構來表示圖形引擎系統;系統通過輸入設備層將底層的各種設備統一映射成上層應用程序支持的兩種基本輸入設備——鼠標設備和鍵盤設備。對于具體的硬件設備,只要根據驅動程序提供的接口,編寫程序實現相應的抽象接口,就能將各種設備模擬成為鼠標或者鍵盤進行輸入。

系統通過維護一個已注冊圖形引擎數組,保存每個圖形引擎數據結構的指針。系統利用一個指針保存當前使用的圖形引擎。每個圖形引擎的數據結構定義了該圖形引擎的一些信息,實現GAL 所定義的各個接口,包括初始化和終止、畫點處理函數、畫線處理函數、矩形框填充函數、調色板函數等。

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

COLORREF FontColor;
}DC,*PDC 

系統中設置和設備上下文主要的API 如表所示
CreateDC(): 創建新的設備上下文
DispatchDC(PDC):釋放設備上下文
GetDrawDes (PDC,POINT*): 獲取設備上下繪圖坐標原點
GetDrawRange(PDC,POINT*):獲取上下文繪圖坐標范圍
GetBackColor(PDC,int* ):獲取上下文繪圖背景色

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

ssage()函數有2個參數,一個用來存放接收到的消息數據,另一個是應用程序主窗口句柄。當獲得一個消息時,會將該消息的目標窗口確認為應用程序主窗口。如果收到的消息不是MSG_QUIT

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

 4 結束語

本文介紹了嵌入式圖形用戶界面系統的基本架構和實現原理,提出了嵌入式環境下自主、輕型、占用資源少可配置的GUI 系統的解決方案。輕量級 GUI 系統已在Linux 系統上測試通過。本文所開發所采用的體系結構以及面向對技術對窗口用戶控件的開發極大的提高了開發效率和代碼的重用率,對開發自主的GUI 系統有一定的借鑒和參考價值。本文作者創新點:利用Linu x開發平臺,研發適用于小型嵌入式系統的專用GUI系統,使用層次結構和面向對象的控件開發技術,縮短開發周期,降低開發成本,為嵌入式GUI系統的開發提供結開發方法的參考。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲国产精品专区久久| 久久国产色av| 国产一区二区三区视频在线观看| 欧美日韩精品在线观看| 欧美电影资源| 牛牛影视久久网| 美女啪啪无遮挡免费久久网站| 久久精品一区蜜桃臀影院| 欧美一级视频精品观看| 亚洲欧美另类在线观看| 亚洲在线日韩| 亚洲欧美日韩国产综合| 亚洲一级在线| 亚洲女人天堂成人av在线| 亚洲在线观看免费| 午夜精品亚洲| 欧美一区二区视频在线观看2020| 欧美一级二区| 久久aⅴ国产欧美74aaa| 久久久国产视频91| 久久综合九色综合网站| 免费欧美日韩国产三级电影| 免费试看一区| 欧美久久久久免费| 欧美视频一二三区| 国产精品激情偷乱一区二区∴| 国产精品国产馆在线真实露脸| 国产精品久久久久久久第一福利| 国产精品毛片va一区二区三区| 国产欧美日韩在线视频| 国产一区二区欧美| 在线观看视频日韩| 亚洲欧洲久久| 一区二区国产精品| 亚洲欧美日韩精品| 亚洲国产成人在线播放| av成人激情| 午夜精品久久久久久久男人的天堂| 欧美亚洲一区| 麻豆久久婷婷| 欧美日韩免费视频| 国产精品一区二区你懂得| 激情综合久久| 一本色道**综合亚洲精品蜜桃冫 | 日韩一区二区精品视频| 在线综合+亚洲+欧美中文字幕| 亚洲男人第一网站| 亚洲国产日本| 亚洲性人人天天夜夜摸| 久久aⅴ国产紧身牛仔裤| 欧美.日韩.国产.一区.二区| 欧美色图一区二区三区| 国产一区二区福利| 亚洲欧洲偷拍精品| 亚洲欧美成人在线| 亚洲国产婷婷香蕉久久久久久99| 中文高清一区| 久久综合国产精品| 欧美日韩在线视频首页| 国内精品写真在线观看| 一本久久综合亚洲鲁鲁五月天| 久久精品官网| 亚洲欧美成人一区二区在线电影| 久久精品国产亚洲高清剧情介绍| 欧美激情中文字幕在线| 国产精品系列在线播放| 亚洲激情女人| 欧美在线播放一区二区| 一区二区日韩伦理片| 久久久久久网址| 国产精品久久网| 亚洲国产欧美一区| 欧美一区二粉嫩精品国产一线天| 99成人在线| 久久人人超碰| 国产精品免费aⅴ片在线观看| 亚洲国产另类精品专区| 亚洲欧美综合| 亚洲一级片在线观看| 欧美成人午夜激情| 国产欧美亚洲精品| 9人人澡人人爽人人精品| 亚洲国产成人精品久久久国产成人一区| 亚洲一区激情| 欧美精品高清视频| 伊人久久亚洲影院| 欧美一区二区三区免费视| 亚洲一区二区三区激情| 榴莲视频成人在线观看| 国产欧美在线| 国产精品99久久久久久人| 亚洲精品日日夜夜| 亚洲网站在线播放| 欧美大片在线观看一区二区| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 亚洲一区二区高清| 在线视频亚洲欧美| 欧美国产三级| 激情久久中文字幕| 性欧美1819sex性高清| 亚洲欧美日韩国产一区| 欧美日韩ab| 亚洲日本成人女熟在线观看| 亚洲人成网站在线播| 另类专区欧美制服同性| 韩国美女久久| 欧美一区二区福利在线| 欧美亚洲自偷自偷| 国产精品中文在线| 亚洲性夜色噜噜噜7777| 亚洲综合社区| 欧美视频在线观看视频极品 | 日韩亚洲视频在线| 99xxxx成人网| 欧美日韩 国产精品| 亚洲免费av网站| 在线视频精品一| 欧美日韩国产三区| 亚洲精品乱码久久久久| 日韩视频免费观看高清在线视频| 欧美成人精品不卡视频在线观看| 黄色成人在线免费| 欧美影院成人| 久久美女性网| 伊人久久久大香线蕉综合直播| 久久精品国产91精品亚洲| 久久精品一本久久99精品| 国产日韩视频一区二区三区| 亚洲欧美日韩综合| 久久都是精品| 国产一区二区三区直播精品电影 | 久久久久网站| 狠狠综合久久av一区二区小说| 久久国产直播| 免费视频亚洲| 亚洲人成毛片在线播放女女| 9国产精品视频| 欧美视频久久| 亚洲在线视频一区| 久久久99国产精品免费| 激情综合亚洲| 日韩一级网站| 欧美日韩在线综合| 亚洲女爱视频在线| 久久久久久国产精品mv| 在线日韩中文| 一本色道久久综合亚洲91| 欧美午夜大胆人体| 亚洲欧美激情四射在线日| 久久婷婷蜜乳一本欲蜜臀| 在线成人小视频| 日韩亚洲在线观看| 国产精品裸体一区二区三区| 欧美一区成人| 欧美激情按摩| 亚洲永久精品国产| 免费成年人欧美视频| 日韩视频免费观看高清在线视频| 亚洲午夜精品网| 国产亚洲一区在线| 亚洲精品孕妇| 国产精品美女视频网站| 亚洲国产合集| 欧美色视频一区| 久久国产日本精品| 欧美日韩视频一区二区三区| 亚洲欧美日韩国产精品 | 欧美人与性动交cc0o| 亚洲一区二区三区涩| 久久影音先锋| 99v久久综合狠狠综合久久| 欧美一区=区| 亚洲精品欧美专区| 久久精品国产999大香线蕉| 亚洲精品视频在线观看网站| 先锋影音久久| 亚洲精美视频| 久久精品国产精品亚洲| 亚洲精品乱码久久久久久| 久久国产精品色婷婷| 亚洲人午夜精品免费| 久久精品国产v日韩v亚洲| 日韩视频三区| 老妇喷水一区二区三区| 亚洲一区三区视频在线观看| 欧美国产日韩在线| 欧美一区2区三区4区公司二百| 欧美日本国产精品| 欧美中文字幕精品| 国产精品久久久久久久久久久久久| 亚洲成人资源网| 国产精品美女久久久久av超清| 亚洲免费精彩视频| 好看的亚洲午夜视频在线| 亚洲综合精品自拍| 亚洲日本va午夜在线电影| 久久―日本道色综合久久| 亚洲性视频h| 欧美日韩一区高清| 亚洲日本中文|