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

        ?

        Qt/Embedded串口類的設(shè)計及應(yīng)用

        2010-03-03 03:31:16陳旭紅高文學(xué)
        關(guān)鍵詞:類庫緩沖區(qū)調(diào)用

        陳旭紅,高文學(xué)

        (1.湖北汽車工業(yè)學(xué)院,湖北 十堰 442002;2.陜西廣播電影電視局,陜西 延安 716000)

        Qt/Embedded串口類的設(shè)計及應(yīng)用

        陳旭紅1,高文學(xué)2

        (1.湖北汽車工業(yè)學(xué)院,湖北 十堰 442002;2.陜西廣播電影電視局,陜西 延安 716000)

        針對Qt/Embedded類中沒有提供串口基礎(chǔ)類的現(xiàn)狀,研究了Qt/Embedded與串口信息交互的方法,并給出了Qt/Embedded串口類的實(shí)現(xiàn)及Qt/Embedded串口類在工業(yè)控制中的應(yīng)用實(shí)例。

        Qt/Embedded;串口;信息交互

        在工業(yè)控制項(xiàng)目當(dāng)中經(jīng)常使用Qt/Embedded類庫開發(fā)界面控制應(yīng)用程序,作為應(yīng)用控制端一般使用RS232總線與控制設(shè)備進(jìn)行通信,但是在Qt/ Embedded類庫中沒有提供串口的基礎(chǔ)類,這就需要在項(xiàng)目應(yīng)用中編寫基于Qt/Embedded的串口基礎(chǔ)類。本文對基于Qt/Embedded的串口基礎(chǔ)類進(jìn)行類定義及應(yīng)用測試。

        1 Qt/Embedded簡介[1]

        Qt/Embedded是Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的Qt版本,與X11版本的Qt在最大程度上接口兼容,采用幀緩存(framebuffer)作為底層圖形接口。Qt/Embedded類庫完全采用C++封裝,并且有著豐富的控件資源以及較好的可移植性,大范圍的Qt/Embedded API可用于多種開發(fā)項(xiàng)目。在工業(yè)控制項(xiàng)目當(dāng)中會使用大量的串口通信,但是Qt/ Embedded沒有提供與串口硬件的接口。

        Qt/Embedded的底層圖形引擎基于 framebuffer。framebuffer是一種驅(qū)動程序接口,它將顯示設(shè)備抽象為幀緩沖區(qū)。該驅(qū)動程序的設(shè)備文件一般是/dev/fb0、/dev/fb1等。對用戶而言,它和/dev下的其他設(shè)備沒有什么區(qū)別,用戶可以把framebuffer看成一塊內(nèi)存,既可以從這塊內(nèi)存中讀取數(shù)據(jù),也可以向其中寫入數(shù)據(jù),而寫操作立即反應(yīng)在屏幕上。Qt/Embedded是 Qt的面向嵌入式應(yīng)用的簡化版本,為運(yùn)行Qt/Embedded,嵌入式Linux內(nèi)核要支持framebuffer。

        它包括一組完備的GUI類、操作系統(tǒng)封裝、數(shù)據(jù)結(jié)構(gòu)類、功能類和組合類。大部分Qt的應(yīng)用程序可以經(jīng)過簡單的編譯與重設(shè)窗口大小移植到Qt/ Embedded。Qt/Embedded的實(shí)現(xiàn)結(jié)構(gòu)如圖1所示。

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

        從Qt/Embedded的結(jié)構(gòu)中可以看出,Qt/Embedded支持鼠標(biāo)、鍵盤、觸摸屏和網(wǎng)絡(luò)等輸入輸出接口,但是不具有串口基礎(chǔ)類。

        在Qt中,對象間通過信號和槽的機(jī)制實(shí)現(xiàn)彼此通信。信號/槽機(jī)制是Qt的核心機(jī)制,是一種高級接口,主要應(yīng)用于對象之間的通信。Qt的信號/槽機(jī)制獨(dú)立于標(biāo)準(zhǔn)的C/C++語言。在Qt中,從QObject或其子類(例如Qwidget)派生的類可擁有自己的信號和槽。當(dāng)對象改變其狀態(tài)時,信號就由該對象發(fā)射出去,從而實(shí)現(xiàn)了信息封裝,以確保對象被當(dāng)作軟件組件來使用。槽用于接收信號,體現(xiàn)為普通的對象成員函數(shù)的形式。槽和信號的連接由程序設(shè)計者完成,只有當(dāng)設(shè)計者利用connect()將信號和槽連接起來后,信號和槽之間才會有上述的通信。信號和槽的機(jī)制使得各個對象之間的協(xié)同工作變得十分簡單,在本串口類設(shè)計中就使用了Qt的信號和槽的機(jī)制(見3.3節(jié))。

        2 Qt/Embedded使用串口的方法

        在Qt/Embedded 2.3.10在開發(fā)中使用Linux作為操作系統(tǒng),Linux操作系統(tǒng)對網(wǎng)絡(luò)和硬件操作都具有很好的支持。

        2.1 使用Qt/Embedded和C語言操作串口

        Qt/Embedded對網(wǎng)絡(luò)具有良好的支持,而Linux下的C語言對網(wǎng)絡(luò)和硬件都有很好的支持,因此可以使用C語言建立TCP Server,Qt/Embedded使用網(wǎng)絡(luò)接口與TCP Server連接,通過C語言的串口操作來完成Qt/Embedded對串口的操作[2]。其操作結(jié)構(gòu)圖如圖2所示。

        此方法比較復(fù)雜,需要定義內(nèi)部通信協(xié)議,故一般不使用這種方法。

        2.2 使用Qt/Embedded直接操作

        Qt/Embedded類庫完全采用C++封裝,但是支持使用Linux標(biāo)準(zhǔn)C語言類庫,可以在Qt/Embedded應(yīng)用程序中使用Linux標(biāo)準(zhǔn)C語言類庫對串口進(jìn)行操作。

        圖2 Qt/Embedded操作結(jié)構(gòu)圖

        3 串口類的設(shè)計

        C語言對硬件的操作一般使用阻塞讀取和查詢的方法讀取數(shù)據(jù),而在Qt/Embedded中使用信號與槽無阻塞操作。因此要在Qt/Embedded中高效的運(yùn)行程序,必須把對串口的操作設(shè)計成無阻塞操作[3]。在Qt的串口類設(shè)計中,串口傳輸?shù)牟铄e控制由硬件來保證;而緩沖區(qū)的溢出根據(jù)應(yīng)用而定,當(dāng)檢測到緩沖不足時,按照一定的比例自動增大緩沖區(qū),從而避免了緩沖區(qū)溢出。

        3.1 設(shè)計分析

        要把串口類設(shè)計成無阻塞操作的類,就必須像Qt/Embedded中QSocket類一樣提供void QSocket:: readyRead()信號供應(yīng)用程序使用,以讀取信息。為了類似實(shí)現(xiàn)void QSocket::readyRead()信號,可以借助QSocketNotifier類。在Qt/Embedded 2.3.10版本中QSocketNotifier支持對所有套接字的回調(diào),QSocketNotifier支持對設(shè)備的讀、寫和錯誤狀態(tài)的回調(diào)。其原型為

        3.2 類的定義

        圖3 QSerialSt定義圖

        為更加方便設(shè)置串口參數(shù),定義了串口參數(shù)結(jié)構(gòu)體QSerialSt,QSerialSt定義如圖3所示。

        QSerial類的結(jié)構(gòu)如圖4所示,串口配置主要由init()函數(shù)傳遞的串口參數(shù)結(jié)構(gòu)體QSerialSt來完成。QSerial類的寫串口可以調(diào)用writeBlock()函數(shù),信息讀取可以使用readyRead()信號。

        圖4 QSerial類的結(jié)構(gòu)圖

        3.3 類的實(shí)現(xiàn)

        QSerial的構(gòu)造函數(shù)QSerial()對變量進(jìn)行初始化,析構(gòu)函數(shù)~QSerial()關(guān)閉套接字。串口的初始化主要工作流程圖如圖5所示。

        圖5 串口的初始化主要工作流程圖

        初始化成功后可以產(chǎn)生一個套接字,并返回一個正確碼。配置串口的過程主要有以下步驟。

        1)調(diào)用openDev()函數(shù)打開串口設(shè)備,設(shè)備名可以從參數(shù)傳遞,打開設(shè)備成功后進(jìn)行下一步,如果打開設(shè)備失敗返回錯誤碼;

        2)調(diào)用setSpeed()函數(shù)設(shè)置串口波特率;

        3)調(diào)用setParity函數(shù)設(shè)備奇偶校驗(yàn),如果設(shè)置成功返回正確碼,如果不成功返回錯誤碼。

        信號 readyRead()由槽 dataRead()觸發(fā),而dataRead()連接在QSocketNotifier上,當(dāng)設(shè)備有數(shù)據(jù)可讀時會回調(diào)dataRead()函數(shù)讀取數(shù)據(jù)并觸發(fā)信號readyRead(),通知上層讀取數(shù)據(jù)。代碼如下:

        4 應(yīng) 用

        4.1 使用QSerial類的主要步驟

        1)初始化QSerialSt結(jié)構(gòu)體,設(shè)置串口信息。

        2)調(diào)用init()函數(shù)傳遞初始化好的QSerialSt結(jié)構(gòu)體進(jìn)行串口設(shè)置,檢測返回值判斷初始化是否成功,并做相應(yīng)的處理。

        3)初始化成功后調(diào)用setNotifier()函數(shù),設(shè)置串口回調(diào)函數(shù)。

        4)連接QSerial類的readyRead()信號,供應(yīng)用類讀取數(shù)據(jù)。

        4.2 QSerial類應(yīng)用示例代碼

        4.3 QSerial類應(yīng)用實(shí)例

        圖6 車載顯示終端主界面

        車載顯示終端中使用QSerial()串口類,完成了顯示終端與下位機(jī)通信的串口通信。圖6是車載顯示終端主界面,可以實(shí)現(xiàn)的工作主要包括:1)刷新數(shù)據(jù)顯示:需要刷新的數(shù)據(jù)包括速度、限速、信號機(jī)編號和類型、距信號機(jī)距離、時間等;2)刷新狀態(tài)指示顯示:包括當(dāng)前色燈以及屏幕右邊的各種狀態(tài)指示;3)刷新圖形顯示:根據(jù)當(dāng)前的數(shù)據(jù),畫出前方4 km和后方1 km的速度、限速曲線以及平縱斷面和道橋隧等。4)車輛位置顯示:主界面左側(cè)約1/5處有一條垂直分割線,表示此處為當(dāng)前機(jī)車位置。

        5 總 結(jié)

        本文定義的QSerial類具有易于使用、占用較少的CPU資源、接口規(guī)范、串口配置過程簡單和數(shù)據(jù)讀取容易等特點(diǎn)。QSerial類已在多個工業(yè)控制項(xiàng)目中使用,經(jīng)過反復(fù)的實(shí)驗(yàn)測試,QSerial類在Linux 2.6.21內(nèi)核和Qt/Embedded 2.3.10的環(huán)境下能夠長時間穩(wěn)定工作。

        [1]QT2.3白皮書[EB/OL].[2010-10-28].http://www.trolltech.com.

        [2]于明儉,陳向陽,方 漢.LINUX程序設(shè)計權(quán)威指南[M].北京:機(jī)械工業(yè)出版社,2001.

        [3]袁鵬飛.24小時學(xué)通qt編程[M].北京:人民郵電出版社,2000.

        Design and Application of Qt/Embedded Serial Port Class

        Chen Xuhong1,Gao Wenxue2
        (1.Hubei Automotive Industries Institute,Shiyan 442002,China;2.Radio Film&TV Bureau of Shaanxi Province,Yan’an 716000,China)

        The information interaction between Qt/Embedded and serial port was studied.The serial port class was realized in Qt/Embedded.An applying example of the serial port class in the industrial control was given.

        Qt/Embedded;serial port;information interaction

        TN316.2

        A

        1008-5483(2010)04-0051-03

        10.3969/j.issn.1008-5483.2010.04.013

        2010-10-28

        陳旭紅(1970-),男,湖北應(yīng)城人,碩士,從事電子技術(shù)方面的研究。

        猜你喜歡
        類庫緩沖區(qū)調(diào)用
        嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設(shè)計與實(shí)現(xiàn)
        用Java編寫客戶機(jī)/服務(wù)器端應(yīng)用程序
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        Python在數(shù)據(jù)可視化中的應(yīng)用
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        數(shù)據(jù)結(jié)構(gòu)課程教學(xué)改革方案和應(yīng)用效果
        軟件工程(2017年12期)2018-01-29 17:35:55
        數(shù)據(jù)結(jié)構(gòu)可視化類庫的設(shè)計與實(shí)現(xiàn)
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        關(guān)鍵鏈技術(shù)緩沖區(qū)的確定方法研究
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        精品亚洲国产探花在线播放| 久久久国产打桩机| 中文亚洲成a人片在线观看| 中文字幕一区二区人妻出轨| 中文字幕一区二区三区在线看一区| 福利视频一区二区三区| 亚洲av综合永久无码精品天堂| 无码AV高潮喷水无码专区线| 中文字幕麻豆一区二区| 亚洲精品久久蜜桃av| 三年的高清电影免费看| 7777精品久久久大香线蕉| 爱v天堂在线观看| 国产一区二区三区青青草| 亚洲中文字幕久久精品无码a| 久久久无码一区二区三区| 成人国产乱对白在线观看| 东京热加勒比久久精品| 人妻夜夜爽天天爽三区| 欧美一级特黄AAAAAA片在线看| 国产精品污一区二区三区在线观看| 亚洲综合网国产精品一区| 午夜精品久久久久久| 色综合久久久久综合999| 亚洲av高清一区二区| 久久久久久欧美精品se一二三四| 小12萝8禁在线喷水观看| 国产小车还是日产的好| 亚洲一二三区免费视频| 国产亚洲精品久久久ai换| 中文字幕无码日韩欧毛| 日本大片一区二区三区| 国产精品欧美久久久久久日本一道| 99这里只有精品| 日本精品一区二区三区在线播放| av在线观看一区二区三区| 中文无码乱人伦中文视频在线v| 国产精品日本天堂| 午夜精品久久99蜜桃| 日韩精品无码中文字幕电影| 久久九九青青国产精品|