《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于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) 控件層是窗口的子窗口。這些子窗口的行為與主窗口一樣,既能夠接收鍵盤和鼠標等外部輸入,也可以在自己的區域內進行輸出,只是其所有活動被限制在主窗口中。控件層設計實現了基本控件,包括按鈕、靜態文本框、單選(多選)框、繪圖框等多種通用控件。控件層充分挖掘了基本窗口系統的潛力。向用戶提供最常用的功能,極大地簡化用戶開發的過程。

 4 結束語

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

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 在线视频 一区二区 | 玖玖在线国产精品 | 国产a免费观看 | 亚洲激情黄色 | 一级在线视频 | 亚洲精品综合久久中文字幕 | 91精品久久久久久久久久 | 欧美色操 | 色www亚洲 | 国产精品精品国产 | 九九久久国产 | 久久y| 美女黄色一级片 | 国产精品嘿咻嘿咻在线播放 | 久久久久琪琪精品色 | 中文字幕在线网址 | 日韩一区二区三区在线 | 寡妇一级毛片 | 成年女人午夜免费视频 | 亚洲精品欧洲久久婷婷99 | 在线免费观看一级毛片 | 天堂va欧美ⅴa亚洲va一国产 | 成人爽a毛片在线视频网站 成人爽爽大片在线观看 | 精品外国呦系列在线观看 | 欧美一区二区免费 | 天天噜夜夜操 | 国产精品久久久天天影视香蕉 | jiucao在线观看精品 | 日本一级毛片中文字幕 | 久草综合网| 久久午夜鲁丝片午夜精品 | 国产三级在线免费观看 | 一区二区三区免费观看 | 久久久久久久91精品免费观看 | 日本黄页免费 | 88精品视频 | 香港一级纯黄大片 | 国产免费v片在线看 | 久久精品vr中文字幕 | 久久99这里只有精品国产 | 性配久久久 |