<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux下Qt/Embedded應(yīng)用關(guān)鍵技術(shù)研究

          嵌入式Linux下Qt/Embedded應(yīng)用關(guān)鍵技術(shù)研究

          作者: 時間:2012-03-26 來源:網(wǎng)絡(luò) 收藏

          隨著后PC時代的到來,的性能有了大幅度的提高,應(yīng)用范圍也越來越廣,當(dāng)初的一些簡單的人機交互接口已經(jīng)無法滿足人們的要求,在中也逐漸出現(xiàn)了圖形用戶界面(Graphic User Interface,GUI),特別是在一些消費類產(chǎn)品中。中的GUI就是在嵌入式系統(tǒng)中為特定的硬件設(shè)備或環(huán)境而設(shè)計的圖形用戶界面系統(tǒng),由于受到目前嵌入式系統(tǒng)本身特點的影響,并受其發(fā)展限制,所以嵌入式系統(tǒng)中的GUI應(yīng)該有如下特點[1]:

          1)占用的存儲空間以及運行時占用資源少。

          2)運行速度以及響應(yīng)速度快。

          3)可靠性高。

          4)便于移植和定制。

          有開放的源碼、高效穩(wěn)定的內(nèi)核、良好的開發(fā)環(huán)境以及支持多種硬件平臺等特點,而且由于的可配置性和模塊化,一個內(nèi)核經(jīng)過配置和裁減可以只占用幾百K左右的存儲空間,使其在嵌入式系統(tǒng)中也得到廣泛應(yīng)用[2]。

          QT/是一個用于嵌入式系統(tǒng)的圖形用戶界面系統(tǒng),能夠高效、穩(wěn)定地運行于嵌入式 Linux系統(tǒng)下,能為用戶提供可靠的交互功能。

          本文就旨在于對這樣的嵌入式GUI QT/應(yīng)用中的一些關(guān)鍵問題進行研究。

          1 嵌入式Linux操作系統(tǒng)

          嵌入式操作系統(tǒng)目前主要有Vxwork、pSOS、Palm OS、Neculeus 和 Windows CE。但這些專用操作系統(tǒng)都是商業(yè)化產(chǎn)品,其價格昂貴,不適合低端嵌入式產(chǎn)品開發(fā)。而且,源代碼的封閉性在很大程度上限制了開發(fā)者的開發(fā)。嵌入式 Linux操作系統(tǒng)彌補了這些不足,Linux操作系統(tǒng)是遵循GPL公約,并且有運行穩(wěn)定、源碼開放的特點,被認為是未來嵌入式操作系統(tǒng)的最佳選擇。

          2 QT/的特點和結(jié)構(gòu)

          QT/Embedded是著名的QT庫開發(fā)商Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的版本[3]。許多基于的 X Window程序可以非常方便地移植到/Embedded上,僅采用Framebuffer作為底層圖形接口。Qt/Embedded類庫完全采用 C++封裝。豐富的控件資源和較好的可移植性是Qt/Embedded最為優(yōu)秀的一方面,使用X下的開發(fā)工具Qt Designer可以直接開發(fā)基于Qt/Embedded的UI(用戶操作接口)界面。下圖為Qt/Embedded的實現(xiàn)結(jié)構(gòu)。

          圖1 Qt/Embedded的實現(xiàn)結(jié)構(gòu)

          Qt/Embedded在代碼設(shè)計上,巧妙地利用了C++的面向?qū)ο髾C制,如繼承、多態(tài)、模板等,具體實現(xiàn)非常靈活。

          3 關(guān)鍵技術(shù)

          3.1 Qt/Embedded的圖形引擎實現(xiàn)

          Qt/Embedded的底層圖形引擎基于Framebuffer。Framebuffer是在Linux內(nèi)核架構(gòu)版本2.2以后新推出的標(biāo)準(zhǔn)顯示設(shè)備驅(qū)動接口。采用mmap系統(tǒng)調(diào)用,可以將Framebuffer的顯示緩存映射為可連續(xù)訪問的一段內(nèi)存空間。由于目前比較高級的ARM體系的嵌入式 CPU中大多集成了LCD控制模塊,LCD控制模塊一般采用雙DMA控制器組成的專用DMA通道。其中一個DMA可以自動從一個數(shù)據(jù)結(jié)構(gòu)隊列中取出并裝入新的參數(shù),直到整個隊列中的DMA操作都已完成為止。另外一個DMA與畫面緩沖區(qū)相關(guān)。雖然使用了雙DMA,但這兩個DMA控制器的交替使用對于CPU來說是不可見的,CPU所獲得只是由兩個DMA組成的一個通道而已。

          Framebuffer驅(qū)動程序的實現(xiàn)分為兩個方面:一方面是對LCD及其相關(guān)部分的初始化,包括緩沖區(qū)的創(chuàng)建和對DMA通道的設(shè)置;另外一方面是對畫面緩沖區(qū)的讀寫,有read、write、lseek等系統(tǒng)調(diào)用接口。對于將畫面緩沖區(qū)的內(nèi)容輸出到LCD顯示屏上,由硬件自動完成,對于軟件來說是透明的。當(dāng)對于DMA通道和畫面緩沖區(qū)設(shè)置完成后,DMA開始正常工作,并將緩沖區(qū)中的內(nèi)容不斷發(fā)送到LCD上。這個過程是基于DMA對于LCD的不斷刷新。

          在Qt/Embedded中,Qscreen類是抽象出的底層顯示設(shè)備基類,它聲明了對于顯示設(shè)備的基本描述和操作方式,如打開、關(guān)閉、獲得顯示能力等。另外還有一個重要的基類是QGfx類,此類抽象出對于顯示設(shè)備的具體操作接口,如選擇畫刷、畫線、畫矩形等。這兩個基類是Qt/Embedded圖形引擎的底層抽象,其中所有具體函數(shù)基本上都是虛函數(shù),Qt/Embedded對于具體的顯示設(shè)備,如Linux的Framebuffer、Qt Virtual Framebuffer做的抽象接口類全都由此繼承并重載虛函數(shù)實現(xiàn)。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();