亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Qt/Embedded的嵌入式GUI顯示架構(gòu)實(shí)現(xiàn)

        2017-06-05 14:15:40
        關(guān)鍵詞:嵌入式設(shè)備系統(tǒng)

        王 凱

        (南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 210016)

        基于Qt/Embedded的嵌入式GUI顯示架構(gòu)實(shí)現(xiàn)

        王 凱

        (南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 210016)

        嵌入式操作系統(tǒng)VxWorks原有的圖形支持WindML對(duì)于開(kāi)發(fā)高級(jí)GUI圖形應(yīng)用比較困難,WindML不支持可視化的圖形界面開(kāi)發(fā),也沒(méi)有大量的圖形控件供開(kāi)發(fā)者使用。通過(guò)對(duì)Qt/Embedded的圖形驅(qū)動(dòng)架構(gòu)和Qt/Embedded的服務(wù)器/客戶(hù)端架構(gòu)的研究,以及對(duì)VxWorks下的圖形庫(kù)WindML的顯示體系結(jié)構(gòu)和圖形驅(qū)動(dòng)支持能力的分析,提出了一個(gè)VxWorks下的基于Qt/Embedded的GUI顯示架構(gòu)。該顯示架構(gòu)通過(guò)引入Qt/Embedded嵌入式支持層,將Qt/Embedded庫(kù)內(nèi)幀緩沖驅(qū)動(dòng)支持類(lèi)和嵌入式系統(tǒng)VxWorks圖形支持庫(kù)WindML融合在一起,實(shí)現(xiàn)了WindML在源碼層級(jí)對(duì)Qt/Embedded庫(kù)的支持。給出了Qt/Embedded嵌入式圖形顯示支持的具體實(shí)現(xiàn)方法,通過(guò)修改Qt/Embedded庫(kù)的VxWorks圖形顯示支持部分的源代碼,使用WindML API獲取到了上層Qt幀緩沖驅(qū)動(dòng)需要的寬度、高度、像素格式、幀緩沖地址等重要信息,實(shí)現(xiàn)了圖形顯示設(shè)備的打開(kāi),注冊(cè)以及訪(fǎng)問(wèn)功能,建立了基于Qt/Embedded的GUI顯示系統(tǒng)。

        Qt/Embedded;嵌入式系統(tǒng);VxWorks;圖形用戶(hù)界面

        0 引 言

        VxWorks操作系統(tǒng)是美國(guó)的WindRiver公司于1983年設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),是嵌入式開(kāi)發(fā)環(huán)境的關(guān)鍵組成部分。VxWorks系統(tǒng)擁有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶(hù)開(kāi)發(fā)環(huán)境,以其良好的可靠性和卓越的實(shí)時(shí)性在軍事、通信、航空、航天等實(shí)時(shí)性要求極高的領(lǐng)域中應(yīng)用廣泛[1]。近年來(lái),嵌入式領(lǐng)域圖形界面得到了越來(lái)越廣泛的應(yīng)用,為用戶(hù)提供一個(gè)友好的人機(jī)交互界面已成為嵌入式開(kāi)發(fā)的一個(gè)重要組成部分。隨著嵌入式設(shè)備硬件的飛速發(fā)展,嵌入式領(lǐng)域圖形GUI技術(shù)已經(jīng)日趨成熟,用戶(hù)對(duì)于嵌入式設(shè)備人機(jī)交互的要求也越來(lái)越高,人們需要的不是晦澀難明的字符界面,而是直觀,操作邏輯簡(jiǎn)單,功能強(qiáng)大的圖形GUI交互功能。

        Qt/Embedded是Trolltech公司推出的一個(gè)跨平臺(tái)的C++圖形用戶(hù)界面應(yīng)用程序框架。它給程序開(kāi)發(fā)者提供了建立圖形用戶(hù)界面所需的所有功能[2]。Qt/Embedded庫(kù)是完全面向?qū)ο蟮?,很容易擴(kuò)展,并且允許真正的組件編程。Qt/Embedded庫(kù)是一套開(kāi)源的C++圖形用戶(hù)界面庫(kù)[3],擁有種類(lèi)豐富的圖形對(duì)象可供開(kāi)發(fā)者使用,采用名為signal/slot信號(hào)槽的事件信號(hào)傳遞機(jī)制。它擁有跨平臺(tái)的集成開(kāi)發(fā)環(huán)境Qt Creator,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),開(kāi)發(fā)難度低,開(kāi)發(fā)環(huán)境友好。同時(shí),它擁有面向嵌入式系統(tǒng)的版本,豐富的控件資源以及良好的可移植性,完全能夠滿(mǎn)足用戶(hù)對(duì)GUI界面的需要[4]。通過(guò)分析Qt/Embedded庫(kù)和VxWorks圖形支持庫(kù)WindML的體系結(jié)構(gòu)、源碼,提出了一種新的基于Qt/Embedded庫(kù)的VxWorks下的圖形支持架構(gòu)。在該架構(gòu)中,增加了VxWorks圖形支持庫(kù)WindML的支持,針對(duì)在嵌入式系統(tǒng)VxWorks下移植和使用Qt/Embedded庫(kù)的問(wèn)題,進(jìn)行了深入研究。

        1 Qt/Embedded的體系結(jié)構(gòu)

        1.1 Qt圖形驅(qū)動(dòng)架構(gòu)

        Qt/Embedded庫(kù)是Qt圖形界面庫(kù)的嵌入式版本,為了適應(yīng)嵌入式操作系統(tǒng)環(huán)境,進(jìn)行了許多改動(dòng)和調(diào)整,它在構(gòu)建GUI環(huán)境時(shí)放棄使用原來(lái)的X Window體系,因此也就不需要使用較大的Xlib庫(kù),所以?xún)?nèi)存占用十分小,能夠適應(yīng)嵌入式開(kāi)發(fā)的需求。在放棄了X Window體系之后,Qt/Embedded庫(kù)底層使用幀緩沖體系作為底層圖形接口[5],并使用輸入事件作為具體的輸入設(shè)備的抽象,比如keyboard和mouse輸入事件等;在上層,Qt/Embedded庫(kù)繼續(xù)使用原本的Qt架構(gòu),從而保證用戶(hù)使用的便利性和一致性,并能夠與X Window系統(tǒng)下的程序部分兼容,使得用戶(hù)便于進(jìn)行程序移植[6]。圖1給出了Qt/Embedded庫(kù)的軟件架構(gòu)。

        Qt/Embedded庫(kù)的軟件總體架構(gòu)可分為以下三層:

        (1)上層控件層:直接提供用戶(hù)使用的GUI控件,給用戶(hù)界面開(kāi)發(fā)提供了基于widget的GUI開(kāi)發(fā)控件。

        (2)上層圖形層:該層是低級(jí)別的繪圖層,提供了對(duì)幀緩沖的繪圖操作,在這一層中,需要獲得幀緩沖驅(qū)動(dòng)體系所需的具體硬件信息,從而為下一層驅(qū)動(dòng)提供支持,與此同時(shí),完成對(duì)底層幀緩沖驅(qū)動(dòng)圖形操作的抽象,供給上層使用。

        (3)圖形引擎和事件驅(qū)動(dòng)層:在這一層中直接進(jìn)行對(duì)底層幀緩沖驅(qū)動(dòng)的訪(fǎng)問(wèn),并將具體的輸入設(shè)備抽象為事件。

        圖形幀緩沖(Framebuffer)體系架構(gòu)是Qt/Embedded圖形引擎的基礎(chǔ),F(xiàn)ramebuffer驅(qū)動(dòng)最重要的功能就是給用戶(hù)提供一個(gè)進(jìn)程空間映射到實(shí)際物理顯示內(nèi)存的接口,該接口通過(guò)系統(tǒng)調(diào)用mmap來(lái)實(shí)現(xiàn)[7-8],具體原理如下:在幀緩沖體系中,顯示硬件設(shè)備被抽象為幀緩沖區(qū),從開(kāi)發(fā)者的角度看,向幀緩沖寫(xiě)入指定格式的數(shù)據(jù)即是向屏幕輸出內(nèi)容,整個(gè)幀緩沖就對(duì)應(yīng)屏幕上圖像的一幀。通過(guò)不斷向Framebuffer中寫(xiě)入數(shù)據(jù),顯示控制器就自動(dòng)地從Framebuffer中取數(shù)據(jù)并顯示出來(lái)。在VxWorks下的GUI顯示體系結(jié)構(gòu)中,幀緩沖位于上層GUI庫(kù)和底層具體的顯示硬件設(shè)備之間,目的是為了屏蔽各種顯示硬件之間不同的操作[9]。這種圖形幀緩沖體系結(jié)構(gòu)也獲得了VxWorks系統(tǒng)內(nèi)核的支持,能夠應(yīng)用于VxWorks系統(tǒng)上。

        1.2 Qt/Embedded的客戶(hù)端/服務(wù)器架構(gòu)

        Qt/Embedded框架依然采用了客戶(hù)端/服務(wù)器的架構(gòu),所以,所有基于Qt/Embedded的用戶(hù)程序運(yùn)行前必須連接到Qt/Embedded服務(wù)器。在服務(wù)器端,Qt/Embedded對(duì)鍵盤(pán)、鼠標(biāo)、屏幕等輸入輸出設(shè)備進(jìn)行管理,同時(shí)也需要對(duì)各個(gè)客戶(hù)端創(chuàng)建的窗口進(jìn)行管理,處理窗口的創(chuàng)建與銷(xiāo)毀、窗口的重疊與移動(dòng)、窗口焦點(diǎn)的轉(zhuǎn)換等操作??蛻?hù)端重要的工作是處理服務(wù)器端發(fā)送的圖形事件,在繪制完畢后通知服務(wù)器端并由服務(wù)器端顯示??蛻?hù)端的其他工作還包括處理窗口內(nèi)部GUI控件的管理工作,繪制Widget,對(duì)網(wǎng)絡(luò)訪(fǎng)問(wèn)進(jìn)行控制,處理文件系統(tǒng)的讀寫(xiě)操作,等等。Qt/Embedded的客戶(hù)端/服務(wù)器架構(gòu)如圖2所示。

        由于Qt/Embedded庫(kù)為了適應(yīng)嵌入式平臺(tái)的硬件特點(diǎn),做了許多兼容工作,并對(duì)Server端進(jìn)行了簡(jiǎn)化,從而使得Qt/Embedded庫(kù)移植的困難程度大大降低,只需要實(shí)現(xiàn)鍵盤(pán)、鼠標(biāo)和屏幕顯示驅(qū)動(dòng),就能實(shí)現(xiàn)Qt/Embedded的移植。

        從靈活性和節(jié)省資源的角度考慮,Qt/Embedded的Server端并不是一個(gè)獨(dú)立的進(jìn)程,而是包含在嵌入式系統(tǒng)下第一個(gè)啟動(dòng)的Qt/Embedded進(jìn)程內(nèi);從開(kāi)發(fā)者的角度來(lái)說(shuō),它和普通的Client端進(jìn)程表現(xiàn)相同,但這個(gè)進(jìn)程控制著對(duì)所有輸入輸出設(shè)備的訪(fǎng)問(wèn)。

        圖2 Qt/Embedded的客戶(hù)端/服務(wù)器架構(gòu)

        2 VxWorks圖形體系結(jié)構(gòu)

        WindML(Wind Media Library)是嵌入式操作系統(tǒng)VxWorks下的多媒體庫(kù)[10],它提供基本的圖形、視頻、音頻開(kāi)發(fā)接口供VxWorks下的開(kāi)發(fā)者使用。WindML庫(kù)提供了一套完整的多媒體設(shè)備驅(qū)動(dòng)開(kāi)發(fā)框架(見(jiàn)圖3),同時(shí)附帶了一系列用來(lái)處理輸入輸出設(shè)備和過(guò)程事件的工具。

        圖3 WindML多媒體開(kāi)發(fā)組件框架

        WindML中共有2個(gè)子組件:軟件開(kāi)發(fā)工具包(SDK)和驅(qū)動(dòng)開(kāi)發(fā)工具包(DDK)。

        SDK用于開(kāi)發(fā)上層應(yīng)用,它提供輸入輸出設(shè)備、字體、音頻和圖形的API集合,使得開(kāi)發(fā)者可以編寫(xiě)面向硬件透明的代碼,并在不同的硬件平臺(tái)下測(cè)試和運(yùn)行。

        DDK用于開(kāi)發(fā)底層對(duì)應(yīng)特定硬件的驅(qū)動(dòng)程序。在DDK中,包含許多通用硬件的驅(qū)動(dòng)程序模板,從而使得開(kāi)發(fā)者可以快速開(kāi)發(fā)出特定驅(qū)動(dòng)的API函數(shù),同時(shí),DDK為開(kāi)發(fā)者提供了可定制性和可擴(kuò)展性。

        在VxWorks下,由WindML為Qt/Embedded庫(kù)提供幀緩沖驅(qū)動(dòng)的嵌入式支持。WindML圖形驅(qū)動(dòng)支持主要通過(guò)2D應(yīng)用層、通用圖形庫(kù)和圖形設(shè)備驅(qū)動(dòng)層與圖形硬件進(jìn)行通信[11],WindML圖形驅(qū)動(dòng)支持體系結(jié)構(gòu)如圖4所示。

        圖4 WindML圖形驅(qū)動(dòng)支持體系結(jié)構(gòu)

        其中,2D應(yīng)用層通過(guò)通用圖形庫(kù)中的UGL圖形接口對(duì)圖形設(shè)備驅(qū)動(dòng)(ugl_ugi_driver結(jié)構(gòu))進(jìn)行訪(fǎng)問(wèn)。驅(qū)動(dòng)程序主要提供符合上層UGL圖形調(diào)用接口并能驅(qū)動(dòng)顯卡硬件的一些接口函數(shù)[12]。ugl_ugi_driver結(jié)構(gòu)如下所示:

        typedef struct ugl_ugi_driver * UGL DEVICE ID;

        typedef struct ugl_ugi_driver{

        /*數(shù)據(jù)成員*/

        UGI_MODE *pMode; /*顯示模式*/

        UGI_PAGE *pPageZero; /*第一個(gè)顯示頁(yè)面地址*/

        void * extension; /*可選的擴(kuò)展驅(qū)動(dòng)部分*/

        /*通用函數(shù)*/

        UGI_STATUS(*info)(struct ugl_ugi_driver * pDriver,

        UGI_INFO_REQinfoRequest,void * info);

        UGL STATUS(*destroy)(struct ugl_ugi_driver *

        pDriver);

        /*支持的模式*/

        UGL STATUS(*modeSet)(struct ugl_ugl_driver *

        pDriver,UGL_MODE * pMode);

        ……

        }

        VxWorks下任何顯卡驅(qū)動(dòng)都是將主要功能函數(shù),如模式設(shè)置、公用畫(huà)點(diǎn)、畫(huà)線(xiàn)等圖形函數(shù)的函數(shù)指針注冊(cè)到UGL_DEVICE_ID結(jié)構(gòu)體中,因此,雖然底層硬件不同導(dǎo)致函數(shù)功能實(shí)現(xiàn)方式不同,但面向上層時(shí)的函數(shù)接口保持一致性,函數(shù)的名稱(chēng)和參數(shù)都是相同的。

        3 Qt/Embedded圖形界面架構(gòu)實(shí)現(xiàn)

        3.1 VxWorks下的Qt/Embedded架構(gòu)

        通過(guò)Qt/Embedded的圖形引擎類(lèi)提供給Framebuffer設(shè)備的支持和WindML DDK提供的API集合支持,可以提出一種自上而下的嵌入式實(shí)時(shí)系統(tǒng)VxWorks下的GUI顯示體系結(jié)構(gòu),如圖5所示。

        從圖5可以看出,Qt幀緩沖驅(qū)動(dòng)依賴(lài)于Qt/Embedded嵌入式支持,Qt/Embedded嵌入式支持又是依靠WindML DDK函數(shù)與底層VxWorks操作系統(tǒng)進(jìn)行通信。通過(guò)關(guān)鍵部分Qt幀緩沖驅(qū)動(dòng)和Qt/Embedded嵌入式支持,構(gòu)建起VxWorks下的GUI顯示體系結(jié)構(gòu)。

        圖5 VxWorks下的Qt/Embedded架構(gòu)

        Qt幀緩沖驅(qū)動(dòng)以類(lèi)的形式存在于QtGui源代碼中,該類(lèi)繼承自QScreen,通過(guò)實(shí)現(xiàn)這個(gè)類(lèi)的具體功能代碼,使得Qt中的QWSServer圖形事件服務(wù)高效而穩(wěn)定的運(yùn)行。在實(shí)現(xiàn)功能的過(guò)程中,使用WindML DDK函數(shù)優(yōu)化幀緩沖驅(qū)動(dòng)獲得硬件相關(guān)信息的過(guò)程(比如屏幕分辨率、緩沖地址等),快速而有效地完成幀緩沖驅(qū)動(dòng)作為上層應(yīng)用和底層顯示設(shè)備之間抽象層的功能。同時(shí),通過(guò)對(duì)圖5中Qt/Embedded嵌入式支持中間層的修改,實(shí)現(xiàn)WindML DDK對(duì)Qt幀緩沖驅(qū)動(dòng)的功能支持。

        3.2 Qt/Embedded嵌入式支持實(shí)現(xiàn)

        VxWorks下構(gòu)建一個(gè)完整的GUI顯示體系結(jié)構(gòu)需要從上層界面到底層系統(tǒng)的完整支持。上層準(zhǔn)備使用Qt/Embedded圖形引擎,它是基于C++類(lèi)庫(kù)實(shí)現(xiàn)的,Qt/Embedded類(lèi)庫(kù)封裝了適應(yīng)不同操作系統(tǒng)的訪(fǎng)問(wèn)細(xì)節(jié),能夠跨平臺(tái)實(shí)現(xiàn)GUI的顯示功能。Qt/Embedded庫(kù)對(duì)目標(biāo)系統(tǒng)的要求是:只要這個(gè)系統(tǒng)有一個(gè)線(xiàn)性地址的緩沖幀并支持C++的編譯器[13]。它通過(guò)自帶的幀緩沖驅(qū)動(dòng)與底層操作系統(tǒng)進(jìn)行通信聯(lián)系。VxWorks系統(tǒng)本身支持GUN C++的編譯[14],同時(shí)該系統(tǒng)的顯示驅(qū)動(dòng)模式支持幀緩沖驅(qū)動(dòng)抽象的工作方式,通過(guò)幀緩沖這個(gè)橋梁,Qt/Embedded庫(kù)可以很好地與VxWorks系統(tǒng)結(jié)合在一起。

        Qt/Embedded中,QScreem類(lèi)是抽象出底層顯示設(shè)備的基類(lèi),其中聲明了對(duì)底層顯示設(shè)備的基本描述和操作方式,Qt/Embedded庫(kù)對(duì)具體的顯示設(shè)備,如VxWorks Framebuffer做的抽象類(lèi)接口都是繼承并重載基類(lèi)中的函數(shù)來(lái)實(shí)現(xiàn)。Qt/Embedded庫(kù)幀緩沖驅(qū)動(dòng)的實(shí)現(xiàn)類(lèi)為文件qscreenvxworksfb_qws.cpp中的QvxWorksFbScreen類(lèi),下面給出qscreenvxworksfb_qws.cpp文件中的Qt/Embedded幀緩沖的主要代碼:

        bool QVxWorksFbScreen::connect(const QString &)

        {

        if(!vxDisplayOpen()) return false;

        //調(diào)用設(shè)備打開(kāi)主函數(shù),失敗則返回

        int format;

        vxDisplayGet(&w,&h,&d,&format,&data,&lstep);

        //獲取顯示設(shè)備信息

        dw=w;

        dh=h;

        mapsize=size=h*lstep;

        ……(略)

        QWSServer::setDefaultMouse("vxworks");

        QWSServer::setDefaultKeyboard("vxworks");

        //設(shè)置鼠標(biāo)鍵盤(pán)

        return true;

        }

        從代碼中可以看出,Qt/Embedded幀緩沖驅(qū)動(dòng)的功能主要通過(guò)vxDisplayOpen和vxDisplayGet兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)。vxDisplayOpen實(shí)現(xiàn)打開(kāi)顯卡設(shè)備并向VxWorks系統(tǒng)注冊(cè)該設(shè)備,獲取設(shè)備資源;vxDisplayGet實(shí)現(xiàn)獲取顯示的具體信息,比如LCD屏幕的寬度、高度等相關(guān)信息,同時(shí),給基類(lèi)QScreen的成員變量data賦值,該變量保存了在Qt/Embedded嵌入式支持層獲取的幀緩沖映射地址。在Qt/Embedded幀緩沖驅(qū)動(dòng)代碼的最后,向QWSServer圖形事件服務(wù)注冊(cè)了使用的輸入設(shè)備驅(qū)動(dòng),在這里,鍵盤(pán)鼠標(biāo)都使用了VxWorks系統(tǒng)驅(qū)動(dòng)。

        如上所述,Qt/Embedded幀緩沖驅(qū)動(dòng)通過(guò)調(diào)用vxDisplayOpen和vxDisplayGet兩個(gè)函數(shù)來(lái)獲得Qt/Embedded嵌入式支持層的支持,這兩個(gè)函數(shù)具體實(shí)現(xiàn)在qvxworksdisplay.c文件中,vxDisplayOpen函數(shù)主要代碼如下:

        int vxDisplayOpen(void)

        {

        char *pDisplayName=UGL_NULL;

        UGL_UINT32displayNumber;

        UGL_STATUS status;

        UGL_REG_DATA *pRegistryData;

        UGL_FB_INFOfbInfo;

        status=uglDisplayOpen(UGL_NULL,&pDisplayName,&displayNumber);

        //使用UGL庫(kù)函數(shù)根據(jù)默認(rèn)名打開(kāi)顯示設(shè)備

        ……(略)

        pRegistryData=uglRegistryFind(UGL_DISPLAY_TYPE,&displayNumber,0,0);

        //使用UGL庫(kù)函數(shù)注冊(cè)顯示設(shè)備

        if(pRegistryData==UGL_NULL)

        {

        printf("Display not found. ");

        uglDisplayClose( UGL_NULL);

        return FALSE;

        }

        vxDisplayId=(UGL_DEVICE_ID) pRegistryData->id;

        //顯示設(shè)備注冊(cè)成功后,從注冊(cè)結(jié)構(gòu)體中提取顯示ID

        ……(略)

        return TRUE;

        }

        在上述代碼中,通過(guò)WindML DDK函數(shù)uglDisplayOpen打開(kāi)顯示設(shè)備,然后通過(guò)調(diào)用uglRegistryFind函數(shù)向VxWorks系統(tǒng)注冊(cè)顯示設(shè)備,并通過(guò)pRegistryData->id獲得了UGL_DEVICE_ID結(jié)構(gòu)體的相關(guān)信息,該結(jié)構(gòu)體包含了所有的圖形接口信息,并把UGL_DEVICE_ID結(jié)構(gòu)體的信息保存在vxDisplayId變量中。

        在vxDisplayGet函數(shù)中,使用vxDisplayId變量,調(diào)用WindML DDK的uglInfo函數(shù),獲取到了上層Qt幀緩沖驅(qū)動(dòng)需要的寬度、高度、像素、像素格式、幀緩沖地址等重要信息,主要代碼如下:

        void vxDisplayGet(int *width,int *height,int *bitsPerPixel,int *pixelFormat,unsigned char **data,int *strideBytes)

        {

        ……(略)

        uglInfo(vxDisplayId,UGL_MODE_INFO_REQ,&modeInfo);

        //根據(jù)顯示設(shè)備ID,獲取顯示相關(guān)信息

        uglARGBSpecGet(modeInfo.colorFormat, &colorSpec);

        //獲取顏色相關(guān)信息

        *width=modeInfo.width;

        *height=modeInfo.height;

        *bitsPerPixel=colorSpec.numBytesPerARGB*8;

        *pixelFormat=modeInfo.colorFormat;

        ……(略)

        *data=(unsigned char *)modeInfo.fbAddress;

        //通過(guò)modeInfo結(jié)構(gòu)體提取幀緩沖地址傳入到Qt類(lèi)中

        ……(略)

        }

        至此,通過(guò)對(duì)Qt/Embedded內(nèi)部的VxWorks系統(tǒng)支持源代碼的分析和修改,獲取到了Qt幀緩沖驅(qū)動(dòng)的所有重要硬件信息,完成了幀緩沖驅(qū)動(dòng)的基本功能,從而實(shí)現(xiàn)了Qt/Embedded嵌入式支持層對(duì)Qt幀緩沖驅(qū)動(dòng)層的支持,也實(shí)現(xiàn)了對(duì)Qt/Embedded在VxWorks系統(tǒng)下的移植。

        3.3 Qt/Embedded顯示支持代碼框架結(jié)構(gòu)

        在Qt庫(kù)的QVxWorksFbScreen類(lèi)中,通過(guò)在connect函數(shù)中調(diào)用的兩個(gè)重要函數(shù)vxDisplayGet和vxDisplayOpen,實(shí)現(xiàn)了Qt庫(kù)與WindML庫(kù)UGL庫(kù)函數(shù)的結(jié)合,通過(guò)UGL庫(kù)函數(shù)獲取到了顯示寬度、高度、像素信息等圖形顯示關(guān)鍵參數(shù),同時(shí)獲取到了顯示幀緩沖內(nèi)存地址等重要信息,從而實(shí)現(xiàn)了Qt/Embedded庫(kù)在VxWorks環(huán)境下對(duì)顯示設(shè)備的支持。顯示支持代碼框架結(jié)構(gòu)如圖6所示。

        圖6 Qt/Embedded顯示支持代碼框架結(jié)構(gòu)圖

        最后,在交叉編譯環(huán)境下編譯修改后的Qt/Embedded庫(kù)源代碼,生成.so庫(kù)文件,即可在VxWorks操作系統(tǒng)環(huán)境下加載使用。

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

        為了實(shí)現(xiàn)VxWorks下便捷、易用的圖形GUI系統(tǒng),實(shí)現(xiàn)Qt/Embedded庫(kù)與VxWorks的完美兼容,在研究分析Qt/Embedded庫(kù)的圖形驅(qū)動(dòng)架構(gòu)和VxWorks系統(tǒng)的圖形顯示體系結(jié)構(gòu)以及在VxWorks下實(shí)現(xiàn)圖形GUI原理的基礎(chǔ)上,通過(guò)對(duì)Qt/Embedded庫(kù)幀緩沖驅(qū)動(dòng)的二次開(kāi)發(fā)修改,實(shí)現(xiàn)了Qt GUI界面在VxWorks下的完美運(yùn)行。Qt/Embedded延續(xù)了Qt在桌面系統(tǒng)的所有功能,豐富的API接口和基于組件的編程模型使得嵌入式VxWorks系統(tǒng)中的GUI應(yīng)用程序開(kāi)發(fā)更加便捷。

        [1] 向孝龍,陳 欣,李春濤.基于RTW和VxWorks的無(wú)人機(jī)仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2014,22(4):1291-1293.

        [2] 吳燕燕,賀鋒濤.基于ARM9平臺(tái)上Qt/Embedded的移植與開(kāi)發(fā)[J].液晶與顯示,2013,28(2):261-265.

        [3] 楊 柳,岳 坤,龐和明,等.Qt/Embedded及嵌入式Linux在智能監(jiān)控系統(tǒng)控制中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2010,30(S1):289-291.

        [4] Chen F,Fan X.Embedded system’s performance analysis with RTC and QT[C]//International symposium on advanced parallel processing technologies.Guangzhou,China:[s.n.],2007:569-579.

        [5] 連照亮,徐世國(guó).基于Qt/Embedded在嵌入式linux下的應(yīng)用研究[J].微計(jì)算機(jī)信息,2010,26(17):81-82.

        [6] 曾劍元.ARM9平臺(tái)上基于Qt/Embedded的嵌入式GUI的研究與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2010.

        [7] Yang L,Sander P V,Lawrence J.Geometry-aware framebuffer level of detail[J].Computer Graphics Forum,2008,27(4):1183-1188.

        [8] Mao C,Johnson K M.Fast-switching liquid-crystal-on-silicon microdisplay with framebuffer pixels and surface-mode optically compensated birefringence[J].Optical Engineering,2006,45(12):1269-1278.

        [9] 吳子平,徐愛(ài)鈞.基于Qt/Embedded的嵌入式GUI的研究與構(gòu)建[J].電腦開(kāi)發(fā)與應(yīng)用,2012,25(1):13-16.

        [10] Battye T G G,Kontogiannis L,Johnson O,et al.iMOSFLM:a new graphical interface for diffraction-image processing with MOSFLM[J].Acta Crystallographica,2011,67(4):271-281.

        [11] 王 璐,官 琴.基于PowerPC嵌入式平臺(tái)的WindML圖形驅(qū)動(dòng)設(shè)計(jì)[J].兵工自動(dòng)化,2013,32(5):95-96.

        [12] 張繼偉.基于WindML環(huán)境下的顯卡驅(qū)動(dòng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2010,33(14):78-80.

        [13] 李 鴿.基于VxWorks WindML組件的SM502顯卡驅(qū)動(dòng)開(kāi)發(fā)[D].西安:西安電子科技大學(xué),2014.

        [14] 謝周標(biāo).嵌入式二維圖形硬件加速引擎研究與設(shè)計(jì)[D].長(zhǎng)沙:湖南大學(xué),2013.

        Implementation of Embedded GUI Display Architecture Based on Qt/Embedded

        WANG Kai

        (College of Computer Science and Technology,Nanjing University of Aeronautics & Astronautics,Nanjing 210016,China)

        It is very difficult for the development of advanced GUI graphics applications that the original graphics support WindML of embedded operating system,VxWorks.WindML does not support the visual graphical interface development and can’t provide large number of graphical controls for developers to use.Through the research on the Qt/Embedded graphics driver architecture and Qt/Embedded server/client architecture,as well as the analysis of the display architecture and graphics drivers support capabilities of the WindML graphics library under VxWorks,a VxWorks GUI with QT/Embedded display architecture has been implemented which can display architecture by introducing the embedded QT/embedded support layer.Combined both QT/embedded database frame buffer drive support and embedded system VxWorks graphics library WindML,the WindML support to QT/embedded library at the source code level has been achieved.The concrete realization method of Qt/Embedded embedded support has been presented.By modifying the source code part of Qt/Embedded Library that supported graphics display and by using WindML API to get the important information such as width,height,pixel format,frame buffer address that is needed by the upper Qt/Embedded layer,opening,registration and accessing to the graphics display device have been achieved and thus GUI display system with Qt/Embedded has been realized.

        Qt/Embedded;embedded system;VxWorks;graphical user interface

        2016-06-01

        2016-09-08 網(wǎng)絡(luò)出版時(shí)間:2017-03-13

        國(guó)防科工局“十三五”重點(diǎn)基礎(chǔ)科研項(xiàng)目(JCKY2016206B001)

        王 凱(1984-),男,碩士研究生,研究方向?yàn)檐浖w系結(jié)構(gòu)。

        http://kns.cnki.net/kcms/detail/61.1450.TP.20170313.1546.070.html

        TP311

        A

        1673-629X(2017)05-0144-05

        10.3969/j.issn.1673-629X.2017.05.030

        猜你喜歡
        嵌入式設(shè)備系統(tǒng)
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無(wú)人機(jī)系統(tǒng)
        ZC系列無(wú)人機(jī)遙感系統(tǒng)
        基于MPU6050簡(jiǎn)單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        搭建基于Qt的嵌入式開(kāi)發(fā)平臺(tái)
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        原來(lái)他們都是可穿戴設(shè)備
        国产精品va无码一区二区| 中文字幕在线亚洲日韩6页| 午夜亚洲精品视频在线| 亚洲AV小说在线观看| 成 人 色综合 综合网站| 日本大乳高潮视频在线观看| 区一区二区三免费观看视频| 人妻无码∧V一区二区| 日本夜爽爽一区二区三区| 网禁拗女稀缺资源在线观看| 亚洲美女自拍偷拍视频| 在线看片免费人成视久网不卡| 无码一级视频在线| 亚洲欧美一区二区三区| 无码熟妇人妻av在线影片最多| 精品亚洲av乱码一区二区三区 | 人人妻人人澡人人爽欧美一区九九| 国产人妻熟女呻吟在线观看| 美女偷拍一区二区三区| 亚洲av影院一区二区三区四区| 久久中文字幕人妻熟av女蜜柚m| 亚洲国产精品一区二区www| 日韩av一区二区网址| 丝袜美腿亚洲综合一区| 精品久久久亚洲中文字幕| 2021国产最新在线视频一区| 国产av无码专区亚洲av琪琪| 巨人精品福利官方导航| 人妻夜夜爽天天爽三区丁香花| 日韩精品免费视频久久| 亚洲视频中文字幕更新| 成人在线免费视频亚洲| 国产午夜成人久久无码一区二区| 中国老熟妇自拍hd发布| 久久天天躁狠狠躁夜夜不卡| 女优一区二区三区在线观看| 免费人妖一区二区三区| 亚洲一区二区三区厕所偷拍| 99久久精品国产亚洲av天| 亚洲国产精品500在线观看 | 美女污污网站|