www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]摘要: 圖形用戶界面(Graphic User Interface, 簡稱GUI)的廣泛流行是當(dāng)今計(jì)算機(jī)技術(shù)的重大成就之一, 它極大地方便了非專業(yè)用戶的使用。本文簡要介紹當(dāng)前國內(nèi)外幾種嵌入式G

摘要: 圖形用戶界面(Graphic User Interface, 簡稱GUI)的廣泛流行是當(dāng)今計(jì)算機(jī)技術(shù)的重大成就之一, 它極大地方便了非專業(yè)用戶的使用。本文簡要介紹當(dāng)前國內(nèi)外幾種嵌入式GUI 系統(tǒng)的實(shí)現(xiàn)方式與特點(diǎn)。對(duì)基于Qt 的嵌入式GUI---Qt/Embedded的交叉開發(fā)平臺(tái)、窗口系統(tǒng)、圖形引擎的實(shí)現(xiàn)技術(shù)以及Qt 的核心特性---信號(hào)與槽機(jī)制進(jìn)行了分析。最后給出了Qt/Embedded 應(yīng)用程序的移植過程, 移植過程采用交叉編譯, 系統(tǒng)界面直觀簡潔, 易于操作。

1 引言

圖形用戶界面系統(tǒng)(GUI)是系統(tǒng)級(jí)的底層軟件, 它可以和文件系統(tǒng)、操作系統(tǒng)內(nèi)核等一起構(gòu)成一個(gè)完整的操作系統(tǒng)。GUI為用戶提供了與應(yīng)用系統(tǒng)交互的可視化通道, 同時(shí)GUI 為程序員提供了一種編程模式, 即GUI 負(fù)責(zé)系統(tǒng)的可視化界面的生成、管理以及系統(tǒng)與用戶之間的信息交互, 而程序員只需專注于對(duì)實(shí)際應(yīng)用的分析。

嵌入式GUI 除了以上特點(diǎn), 還要求簡單、直觀、可靠、占用資源小且反應(yīng)快速, 以適應(yīng)嵌入式系統(tǒng)硬件資源有限的條件。

另外, 由于嵌入式硬件本身的特殊性, 嵌入式GUI 應(yīng)具備高度可移植性和可裁剪性, 以適應(yīng)不同硬件平臺(tái)的需求。

2 國內(nèi)外幾種嵌入式GUI 系統(tǒng)實(shí)現(xiàn)方式與特點(diǎn)

為了適應(yīng)日益擴(kuò)大的嵌入式Linux 市場的需求, 國內(nèi)外的相關(guān)研究機(jī)構(gòu)和開發(fā)商已經(jīng)或者正在開發(fā)一大批嵌入式圖形系統(tǒng)項(xiàng)目和原型產(chǎn)品。其中較為著名的開放源碼項(xiàng)目有Tiny X(小型的X 窗口系統(tǒng))、Microwindows、MiniGUI、Qt/Embedded 等。

Tiny X:是標(biāo)準(zhǔn)X- windows 在嵌入式系統(tǒng)的小巧實(shí)現(xiàn), 作為一個(gè)圖形環(huán)境, X- window 是成功的, 但由于在體系接口上的原因, 限制了它對(duì)游戲、多媒體的支持能力。

Microwindows: 典型的基于Server/Clinent 體系結(jié)構(gòu)的GUI系統(tǒng), 提供了相對(duì)完善的圖形功能和一些高級(jí)的特性, 如Alpha混合、三維支持等。該系統(tǒng)為了提高運(yùn)行速度, 也改進(jìn)了基于Socket 套接字的X 實(shí)現(xiàn)模式, 采用了基于消息機(jī)制的Server/Client 傳輸機(jī)制。

MiniGUI:由國內(nèi)自由軟件開發(fā)人員設(shè)計(jì)開發(fā), 是一種面向嵌入式系統(tǒng)或者實(shí)時(shí)系統(tǒng)的圖形界面支持系統(tǒng)。MiniGUI 具有資源消耗小、速度快、效率高的特點(diǎn), 但目前還不是很成熟, 主要表現(xiàn)在:體系結(jié)構(gòu)不完善, 自有圖形引擎的功能較弱, 控件的可定制性不好, 基于線程機(jī)制的系統(tǒng)脆弱性在復(fù)雜應(yīng)用中更為突出, 尤其是缺少一個(gè)方便的圖形開發(fā)環(huán)境。

Qt/Embedded: 縮寫為Qt/E, Qt 是Trolltech 公司的產(chǎn)品, 是一個(gè)多平臺(tái)的C++圖形用戶界面應(yīng)用程序框架, 它注重于給用戶提供精美的圖形用戶界面所需要的所有元素。而且它是基于一種面向?qū)ο蟮乃枷耄?所以用戶對(duì)其對(duì)象的擴(kuò)展是相當(dāng)容易的, 并且他還支持真正的組件編程。這也是本文將要重點(diǎn)介紹的內(nèi)容。

3 Qt /E 的介紹及開發(fā)環(huán)境的建立

3.1 Qt/E 體系結(jié)構(gòu)

3.1.1 交叉開發(fā)平臺(tái)

Qt 是用于本地化跨平臺(tái)應(yīng)用開發(fā)的領(lǐng)先性框架。Qt 所有平臺(tái)的API 是一致的。這就意味著在一種平臺(tái)上寫的應(yīng)用程序, 在新的平臺(tái)上經(jīng)過重新編譯和連接便能運(yùn)行于該新平臺(tái)上。因此, 軟件開發(fā)者通過開發(fā)和維護(hù)一種平臺(tái)的應(yīng)用源碼來用于多種平臺(tái)的開發(fā)。同樣, 嵌入式Qt 也可以移植基于Qt 的軟件到嵌入式Linux 中。Qt 可提供的平臺(tái), 如圖1:

 

 

Qt/Windows: 用于Microsoft Windows xp、2000、NT4、Me/98.

Qt 庫使用Windows 的GDI API 來實(shí)現(xiàn), 并且使用微軟的窗口系統(tǒng); Qt/X11:包括Linux、HP- UX、Sun Solaris、Digital UNIX、SGI Irix、IBMAIX 等。Qt 庫使用X11 庫來實(shí)現(xiàn), 并且使用X 窗口系統(tǒng); Qt/E:包括一個(gè)完整的窗口系統(tǒng), 并允許設(shè)計(jì)者輕易地加入各種顯示設(shè)備和硬件輸入設(shè)備(如鼠標(biāo)、鍵盤、觸摸屏等); Qt/Mac:

用于Mac OS X 平臺(tái)。Qt 對(duì)不同平臺(tái)的專門API 進(jìn)行了封裝, 如文件處理、網(wǎng)絡(luò)(操作, 協(xié)議)、進(jìn)程處理、線程、數(shù)據(jù)庫訪問等。

3.1.2 Qt/E 的窗口系統(tǒng)

Qt/E 的窗口系統(tǒng)采用一種客戶/服務(wù)器體系結(jié)構(gòu), 如圖2所示。一個(gè)典型的嵌入式Qt 窗口系統(tǒng)一般包括一個(gè)服務(wù)器進(jìn)程、一個(gè)或多個(gè)客戶進(jìn)程(簡稱服務(wù)器和客戶)。服務(wù)器負(fù)責(zé)為客戶和其本身分配顯示區(qū)域、生成鼠標(biāo)和鍵盤事件。而客戶則通過與服務(wù)器通信來申請(qǐng)顯示區(qū)域, 接收鼠標(biāo)和鍵盤事件。客戶可以直接訪問所分配的顯示區(qū)域, 以便為用戶提供GUI 服務(wù)。服務(wù)器和客戶通過共享內(nèi)存的方式來傳遞所有分配顯示區(qū)域上的信息。

 

 

服務(wù)器:服務(wù)器維護(hù)著一組區(qū)域, 當(dāng)窗口被創(chuàng)建、移動(dòng)、改變大小和破壞時(shí), 通過這組區(qū)域來改變每個(gè)客戶的申請(qǐng)。該區(qū)域存放在共享內(nèi)存中, 在執(zhí)行繪圖操作時(shí), 客戶可以從中讀取信息; 客戶:嵌入式Qt 為客戶提供的API 與標(biāo)準(zhǔn)的Qt API 是一致的。當(dāng)Qt/E 客戶使用Qt API 畫線時(shí), Qt/E 庫直接訪問顯存, 完成畫線工作。嵌入式Qt 客戶庫還負(fù)責(zé)處理所有的繪畫操作, 另外, 他還處理那些定制的窗口裝飾(如標(biāo)題條等)。

3.1.3 Qt/E 圖形引擎的實(shí)現(xiàn)

Qt/E 的底層圖形引擎基于幀緩沖(frame buffer)。幀緩沖是標(biāo)準(zhǔn)顯示設(shè)備驅(qū)動(dòng)接口, 使用MMAP 系統(tǒng)將幀緩存映射到應(yīng)用程序虛擬內(nèi)存空間, 這樣應(yīng)用程序可以訪問它。

幀緩沖驅(qū)動(dòng)程序的實(shí)現(xiàn)分為兩個(gè)方面, 一方面是LCD 等相關(guān)硬件及緩存的初始化, 包括圖形在緩沖區(qū)的創(chuàng)建和設(shè)置DMA 通道; 另外一方面是對(duì)畫面緩沖區(qū)的讀寫, read、write 及l(fā)seek 等系統(tǒng)調(diào)用接口可以調(diào)用驅(qū)動(dòng)程序的讀寫函數(shù)。至于將畫面緩沖區(qū)的內(nèi)容輸出到LCD 顯示屏上, 則由硬件自動(dòng)完成。

當(dāng)設(shè)置DMA 通道和畫面緩沖區(qū)后, DMA 開始正常工作并將緩沖區(qū)中的內(nèi)容不斷發(fā)送到LCD 上, 這個(gè)過程基于DMA 對(duì)于LCD 的不斷刷新。幀緩沖驅(qū)動(dòng)程序則將數(shù)據(jù)寫入幀緩存中, 這通過映射MMAP 來實(shí)現(xiàn)。

在Qt/E 中, QScreen 類為抽象出的底層顯示設(shè)備基類, 其中聲明了對(duì)于顯示設(shè)備的基本描述和操作方式, 如打開、關(guān)閉、獲得顯示能力、創(chuàng)建GFX 操作對(duì)象等。另外一個(gè)重要的基類是QGFX 類。該類抽象出對(duì)于顯示設(shè)備的具體操作接口(圖形設(shè)備環(huán)境), 如選擇畫刷、畫線、畫矩形、alpha 操作等。以上兩個(gè)基類是Qt/E 圖形引擎的底層抽象, 其中許多函數(shù)是虛函數(shù)。當(dāng)具體的顯示設(shè)備(如具體的幀緩沖設(shè)備和虛擬幀緩沖設(shè)備)從其派生類時(shí), 這些派生類會(huì)繼承并重載基類中的虛函數(shù)來實(shí)現(xiàn)。

3.2 Qt 系統(tǒng)的信號(hào)與槽(Signal and Slot)機(jī)制

信號(hào)/槽是一種高級(jí)接口, 應(yīng)用于對(duì)象之間的通信, 是Qt 的核心特性, 也是Qt 區(qū)別于其他工具包的重要地方。信號(hào)/槽是Qt 自行定義的一種通信機(jī)制, 獨(dú)立與標(biāo)準(zhǔn)的C/C++語言, 因此要正確的處理信號(hào)和槽, 必須借助于一個(gè)稱為MOC(Meta ObjectCompiler)的Qt 工具, 該工具是一個(gè)C++預(yù)處理程序, 它為高層次的事件處理自動(dòng)生成所需要的附加代碼。

Qt 中使用信號(hào)/槽機(jī)制替代原始回調(diào)和消息映射機(jī)制。當(dāng)一個(gè)特定事件發(fā)生的時(shí)候, 一個(gè)信號(hào)被發(fā)射。Qt 的窗口部件有很多預(yù)定義的信號(hào), 但是程序員總是可以通過繼承來加入自定義的信號(hào)。槽就是一個(gè)可以被調(diào)用處理特定信號(hào)的函數(shù)。Qt 的窗口部件有很多預(yù)定義的槽, 但是通常的習(xí)慣是加入程序員自己的槽, 這樣就可以處理自己所感興趣的信號(hào)。[!--empirenews.page--]

所有從QObject 或其子類派生的類都能夠包含信號(hào)和槽。

當(dāng)對(duì)象改變其狀態(tài)時(shí), 信號(hào)就由該對(duì)象發(fā)射出去, 這就是對(duì)象所要做的全部事情。它不知道另一端是誰在接收這個(gè)信號(hào), 這就是真正的信息封裝, 它確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來使用。槽用于接收信號(hào), 但它們是普通的對(duì)象成員函數(shù)。

一個(gè)槽并不知道是否有任何信號(hào)與自己相連接。而且, 對(duì)象并不了解具體的通信機(jī)制, 這樣就可以相對(duì)容易地開發(fā)出代碼可高重用的類。

多個(gè)信號(hào)可以連接一個(gè)槽, 一個(gè)信號(hào)也可以連接多個(gè)槽,甚至一個(gè)信號(hào)與另外一個(gè)信號(hào)相連接也是可能的, 這時(shí)無論第一個(gè)信號(hào)什么時(shí)候發(fā)射系統(tǒng)都將立刻發(fā)射第二個(gè)信號(hào), 如圖3所示??傊?, 信號(hào)與槽構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制。

 

4 Qt /E 的移植

在PC 上基于Qt/X11 和qvfb 的應(yīng)用程序調(diào)試通過以后就可以將應(yīng)用程序軟件移植到目標(biāo)平臺(tái)上, 但前提是要保證framebuffer、觸摸屏等驅(qū)動(dòng)程序的正常運(yùn)行。Qt/E 移植過程如下:

1) 交叉工具鏈的安裝。

本文選用的交叉工具鏈?zhǔn)莂rm- linux- gcc 系列。安裝包為:

cross- 2.95.3.tar.bz2 將其拷貝到某個(gè)目錄下, 依次執(zhí)行如下命令:

tar - jxvf cross- 2.95.3.tar.bz2這個(gè)工具鏈應(yīng)該安裝的路徑是:/usr/local/arm/2.95.3(或者可以通過查看GCC 版本號(hào), 可以得到一些信息, 從版本信息中可以看到"- prefix=…… ", 這就是GCC 安裝的路徑, 它是在GCC編譯前通過prefix 選項(xiàng)配置的)。

¥ mkdir - p /usr/local/arm

¥mv ./2.95.3 /usr/local/arm

然后, 在環(huán)境變量PATH 中添加路徑, 就可以直接使用arm- linux- gcc 命令了。

¥export PATH=/usr/local/arm/2.95.3/bin:$PATH

2) 交叉編譯Qt/E 庫安裝完交叉工具鏈之后, 需要對(duì)Qt/E 軟件包進(jìn)行交叉編譯。將Qt/E 的源代碼拷貝到另外一個(gè)目錄下, 依次執(zhí)行如下命令序列:

tar xfz qt- embedded- free- 3.2.1.tar.gz

cd qt- embedded- free- 3.2.1

export QTDIR=¥PWD

export QTEDIR=¥QTDIR

export PATH=¥QTDIR/bin:¥PATH

export LD_LIBRARY_PATH = ¥QTDIR/lib: ¥LD_LIBRARY_

PATH

export PATH=/usr/local/arm/2.95.3/bin:¥PATH

./configure - embedded arm - thread

Qt/E 的配置選項(xiàng)可以參考。/configure –help.其中比較關(guān)鍵的是- embeddded arm 表示配置為目標(biāo)板為ARM 的嵌入式用途, 在編譯過程中會(huì)進(jìn)行多級(jí)優(yōu)化以減小體積, 提高效率。

3) 交叉編譯Qt/E 應(yīng)用程序。

有了交叉工具鏈以及經(jīng)過交叉編譯的Qt/E 庫之后, 就可以將驅(qū)動(dòng)程序或應(yīng)用程序進(jìn)行編譯, 然后發(fā)布到ARM平臺(tái)上。

首先, 編寫項(xiàng)目工程文件。pro, 然后用qmake 工具生成Makefile 文件, 最后調(diào)用Make 指令編譯、鏈接即可。這個(gè)過程中, 在生成Makefile 文件之前, 需要修改環(huán)境變量使其指向交叉編譯后的Qt/E 庫所在目錄。最終生成ARM平臺(tái)目標(biāo)代碼,即可在目標(biāo)平臺(tái)上運(yùn)行測試。

5 總結(jié)

嵌入式產(chǎn)品的廣泛應(yīng)用帶動(dòng)了圖形用戶界面(GUI)的迅速發(fā)展, 嵌入式系統(tǒng)需要一個(gè)高性能、高可靠的GUI 支持。Qt/E 延續(xù)了Qt 在桌面系統(tǒng)的所有功能, 豐富的API 接口和基于組件的編程模型使得嵌入式Linux 系統(tǒng)中的應(yīng)用程序開發(fā)更加便捷。由于Qt/E 本身面向高端的手持設(shè)備和移動(dòng)設(shè)備, 將成為未來嵌入式系統(tǒng)的主流GUI.

本文創(chuàng)新觀點(diǎn): 本文首先比較當(dāng)前流行的國內(nèi)外幾種嵌入式GUI 系統(tǒng)的實(shí)現(xiàn)方式與特點(diǎn), 分析它們的優(yōu)缺點(diǎn)。著重介紹了基于Qt 的嵌入式GUI---Qt/Embedded, 并通過舉例來具體說明Qt/Embedded 應(yīng)用程序的移植過程。

本站聲明: 本文章由作者或相關(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)系本站刪除。
換一批
延伸閱讀

當(dāng)?shù)貢r(shí)間 9 月 8 日,SpaceX 與 EchoStar 正式達(dá)成一項(xiàng)價(jià)值 170 億美元的頻譜交易,SpaceX 將收購 EchoStar 旗下 AWS-4 頻段(2GHz 頻段)及 H 頻段的頻譜許可證,此舉引發(fā)...

關(guān)鍵字: SpaceX EchoStar 星鏈 通信

本屆年會(huì)將在上海(11月13-14日)、北京(11月19-20日)和深圳(11月27-28日)舉行,面向嵌入式設(shè)計(jì)工程師推出25門技術(shù)課程

關(guān)鍵字: 嵌入式 MCU 模擬

上海2025年9月5日 /美通社/ -- 由紐倫堡會(huì)展(上海)有限公司舉辦的上海國際嵌入式會(huì)議將于 2025 年 10 月 16-17 日在上海世博展覽館舉辦。 此次會(huì)議將由三個(gè)版塊組成:嵌入式技術(shù)會(huì)議、汽...

關(guān)鍵字: 嵌入式 CE CHINA EMBEDDED

從外部看,電子系統(tǒng)仿佛一個(gè)統(tǒng)一的學(xué)科或設(shè)備,各組成部分協(xié)同工作,渾然一體。然而揭開表象,其內(nèi)在卻是另一番景象:一個(gè)碎片化、多層次的世界——其中每一層都獨(dú)立且復(fù)雜,衍生出各自特有的工具、專家、工作流程,甚至哲學(xué)體系。

關(guān)鍵字: 嵌入式 電子系統(tǒng) 半導(dǎo)體

8位單片機(jī)在嵌入式設(shè)計(jì)領(lǐng)域已經(jīng)成為半個(gè)多世紀(jì)以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復(fù)雜,8位單片機(jī)依然不斷發(fā)展,積極應(yīng)對(duì)新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機(jī)系列,配備了先進(jìn)的獨(dú)立...

關(guān)鍵字: 單片機(jī) 嵌入式 CPU

深圳2025年8月28日 /美通社/ -- 8月26日,2025 ELEXCON深圳國際電子展盛大啟幕。本屆大會(huì)以"All for AI"為主題,深圳市德...

關(guān)鍵字: AI 工業(yè)級(jí) SSD 嵌入式

深圳2025年8月26日 /美通社/ -- 8月26日,由博聞創(chuàng)意會(huì)展主辦的 第22屆深圳國際電子展暨嵌入式展(elexcon2025)在深圳(福田)會(huì)展中心隆重開幕。 作為中國電子與嵌入式技術(shù)領(lǐng)域的專業(yè)大展,本屆展會(huì)...

關(guān)鍵字: 嵌入式 電子 高通 AI

模塊化設(shè)計(jì)作為一種將系統(tǒng)拆分為獨(dú)立、可復(fù)用組件的方法,能夠在低代碼平臺(tái)中實(shí)現(xiàn)功能的靈活組合,并最大限度地提升系統(tǒng)性能。本文將探討如何通過模塊化設(shè)計(jì),使得低代碼平臺(tái)既能快速適應(yīng)變化,又能保持高效穩(wěn)定的運(yùn)行。

關(guān)鍵字: 模塊化設(shè)計(jì) 嵌入式

CPU親和度通過限制進(jìn)程或線程可以運(yùn)行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式

加密算法分對(duì)稱加密和非對(duì)稱算法,其中對(duì)稱加密算法的加密與解密密鑰相同,非對(duì)稱加密算法的加密密鑰與解密密鑰不同,此外,還有一類不需要密鑰的散列算法。

關(guān)鍵字: 算法 嵌入式
關(guān)閉