李長(zhǎng)星+王波+胡振華
摘 要: 針對(duì)同時(shí)滿足高速的A/D采集、高速率的數(shù)據(jù)傳輸和實(shí)時(shí)顯示且便于攜帶實(shí)際應(yīng)用需要,研究設(shè)計(jì)了基于FPGA+ARM的實(shí)時(shí)數(shù)據(jù)采集的嵌入式平臺(tái)。采用FPGA控制A/D完成高速數(shù)據(jù)采集,通過(guò)串口總線實(shí)現(xiàn)了平臺(tái)內(nèi)部FPGA和ARM之間指令的下達(dá)和數(shù)據(jù)的上傳,最終實(shí)現(xiàn)在ARM上通過(guò)Qt應(yīng)用程序?qū)/D采集的數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示。
關(guān)鍵詞: FPGA; ARM; 嵌入式Linux; 串口通信; Qt
中圖分類號(hào): TN911?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)03?0151?04
Display system for real?time data acquisition based on FPGA and ARM
LI Chang?xing, WANG Bo, HU Zhen?hua
(Xian Shiyou University, Xian 710065, China)
Abstract: Aiming at meeting the actual application needs of the high?speed AD sampling, high rate data transmission and real?time display and portable, a real?time data acquisition based on FPGA+ARM embedded platform is researched and designed, which uses FPGA controlled AD to realize high speed data acquisition, the internal instruction issued and data upload between FPGA and ARM is achieved by serial bus. Finally the real?time display of the data collected by AD is realized on the ARM by Qt application.
Keywords: FPGA; ARM; embedded Linux; serial port communication; Qt
0 引 言
目前,伴隨著FPGA技術(shù)和嵌入式技術(shù)的進(jìn)步, 測(cè)量?jī)x器也有著長(zhǎng)足的發(fā)展。FPGA和ARM處理器憑借著在資源豐富、執(zhí)行速率快、重量輕、體積小、可靠性高等優(yōu)勢(shì),非常適合必須同時(shí)滿足高速的A/D采集、高速率的數(shù)據(jù)傳輸和實(shí)時(shí)顯示的應(yīng)用場(chǎng)合。基于FPGA+ARM的實(shí)時(shí)數(shù)據(jù)采集的嵌入式平臺(tái),很好地解決了傳統(tǒng)測(cè)量?jī)x器采集速率低、體積龐大、實(shí)時(shí)性不足的缺點(diǎn)[1]。
本文基于Altera公司的Cyclone系列EP1C3T144C8N的FPGA器件和ARM920T的處理器S3C2440A搭建了數(shù)據(jù)采集的架構(gòu)平臺(tái)。FPGA采用Altera公司的Cyclone系列的EP1C3T144C8,EP1C3T144 提供2 910個(gè)邏輯單元(LES),13 個(gè)128×36位的M4K RAM模塊,1個(gè)鎖相環(huán)以及104個(gè)I/O口。S3C2440A是Samsung公司為普通應(yīng)用和手持設(shè)備研發(fā)的一款高性能低功耗的微小型芯片,其內(nèi)部搭載了由ARM公司設(shè)計(jì)的16/32 位ARM920T 的RISC 處理器,這也是該款芯片的主要特點(diǎn)[2?3]。本文Linux下的應(yīng)用程序GUI的設(shè)計(jì)采用Qt來(lái)進(jìn)行。Qt是一個(gè)C++圖形用戶界面應(yīng)用程序框架[4],由Nokia公司所開(kāi)發(fā)。其優(yōu)點(diǎn)在于能夠跨多平臺(tái)使用、豐富的應(yīng)用程序編程接口 (API)、面向?qū)ο蟮牟僮鳌⒋罅康拈_(kāi)發(fā)文檔等。Qt/E即Qt/Embeded,是Qt的嵌入式版本。
1 系統(tǒng)結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)框圖如圖1所示,由ARM發(fā)送開(kāi)始采集的命令,通過(guò)串口下達(dá)給FPGA的串口接收模塊,經(jīng)過(guò)對(duì)命令進(jìn)行解析,通過(guò)A/D控制模塊控制A/D芯片開(kāi)始數(shù)據(jù)采集,然后將采集到的數(shù)據(jù)存入FPGA內(nèi)部的串口發(fā)送的FIFO進(jìn)行數(shù)據(jù)緩沖,最后通過(guò)FPGA的串口發(fā)送模塊將數(shù)據(jù)再傳送給ARM。A/D芯片采用Analog Device公司的AD7899,是一款快速、低功耗、14位400 KSPS模數(shù)轉(zhuǎn)換器(ADC)。
圖1 系統(tǒng)結(jié)構(gòu)框圖
FPGA中數(shù)據(jù)采集控制部分的RTL級(jí)視圖如圖2所示,將其A/D的低8位作為數(shù)據(jù)輸出,在FPGA的控制下鎖存之后通過(guò)db7_i[7:0]存儲(chǔ)到FPGA中的FIFO,當(dāng)串口發(fā)送模塊經(jīng)過(guò)對(duì)FIFO的空滿信號(hào)進(jìn)行判斷,在FIFO非空的情況下啟動(dòng)tx_start信號(hào),以一定的波特率將數(shù)據(jù)發(fā)送到ARM上進(jìn)行實(shí)時(shí)顯示 [5]。
圖2 FPGA中數(shù)據(jù)采集控制部分的RTL級(jí)視圖
通過(guò)Modelsim仿真結(jié)果如圖3所示,可以看到,在串口發(fā)送端口的數(shù)據(jù)tx_data與A/D所采集到的數(shù)據(jù)db7_i[7:0]一致。
圖3 Modelsim仿真結(jié)果
2 FPGA與ARM的串口通信
要完成FPGA與ARM的串口通信,完成命令的下達(dá)和數(shù)據(jù)的上傳及數(shù)據(jù)的顯示就必須完成兩點(diǎn):FPGA的串口與ARM上的Linux操作系統(tǒng)的通信;Linux操作系統(tǒng)與Qt應(yīng)用程序的通信。
2.1 Linux串口驅(qū)動(dòng)程序
Linux操作系統(tǒng)是無(wú)法直接和外圍串口進(jìn)行數(shù)據(jù)通信的。因此,串口驅(qū)動(dòng)程序就成為操作系統(tǒng)內(nèi)核和串口之間的橋梁,它屏蔽的底層串口信息并將其在操作系統(tǒng)內(nèi)核中抽象為設(shè)備文件的形式。串口驅(qū)動(dòng)程序的主要作用歸納為:
(1)初始化和釋放串口;
(2) 將數(shù)據(jù)從內(nèi)核空間中傳給串口和將串口讀取數(shù)據(jù)傳遞到內(nèi)核;
(3) 讀取來(lái)自Qt應(yīng)用程序傳給設(shè)備文件的數(shù)據(jù);
(4) 返回Qt應(yīng)用程序請(qǐng)求的數(shù)據(jù)。
串口驅(qū)動(dòng)程序結(jié)構(gòu) 如圖4所示,主要由終端設(shè)備層、行規(guī)程層、串口抽象層和串口芯片層這4層組成。終端設(shè)備層的作用是提供一致的訪問(wèn)接口供內(nèi)核調(diào)用,使得內(nèi)核在操作串口時(shí)不必考慮具體終端的類型。行規(guī)程層用來(lái)是設(shè)置數(shù)據(jù)交換的規(guī)則,比如處理輸入數(shù)據(jù)變換、流控等。底層串口驅(qū)動(dòng)的核心部分是串口抽象層,它的作用是將總結(jié)出各類串口共性,比如根據(jù)串口芯片層所提供的串口波特率、地址識(shí)別抽口類型等。串口芯片層也屬于底層串口驅(qū)動(dòng),它與具體芯片有關(guān)且直接控制硬件,它的作用是設(shè)置串口芯片的工作的相關(guān)寄存器并向上層提供比如中斷號(hào)、訪問(wèn)地址的芯片資源[6]。
2.2 第三方串口控制類Qextserialport類
由于終端設(shè)備層向上提供統(tǒng)一的訪問(wèn)接口,這樣Qt應(yīng)用程序就可以通過(guò)這樣的訪問(wèn)接口進(jìn)行打開(kāi)、讀寫或者是控制(open、read、write、ioctl等)來(lái)方便地對(duì)硬件進(jìn)行操作。在本設(shè)計(jì)中采用第三方為Qt編寫的擴(kuò)展類Qextserialport,它繼承自QIODevice類,Qextserialport與QIODevice的關(guān)系圖,如圖5所示。
圖4 串口驅(qū)動(dòng)程序結(jié)構(gòu)
圖5 Qextserialport與QIODevice的關(guān)系圖
Qextserialport類有兩種工作模式,分別為查詢方式Polling和事件驅(qū)動(dòng)方式EventDriven。Qt在調(diào)用 Qextserialport類定義串口的時(shí)候,可以進(jìn)行選擇。
查詢方式Polling是一種讀寫函數(shù)同步運(yùn)行的工作模式,該模式的好處是系統(tǒng)開(kāi)銷較小但是功能上相對(duì)單一。
事件驅(qū)動(dòng)方式EventDriven則不同,分析源代碼可以看到有這樣一個(gè)監(jiān)測(cè)串口事件函數(shù)(monitorCommEvent),其作用是一旦有數(shù)據(jù)到來(lái)就會(huì)發(fā)出事件信號(hào),從而讀信號(hào)立即響應(yīng)讀取串口的數(shù)據(jù)。在此方式下,讀寫串口操作屬于異步操作,當(dāng)調(diào)用讀寫函數(shù)時(shí)會(huì)立即返回函數(shù)值且期間調(diào)用線程不會(huì)被凍結(jié)。
在Linux下只支持Polling模式,需要建立定時(shí)器來(lái)讀取串口的數(shù)據(jù)[7?8]。
3 實(shí)時(shí)曲線顯示功能的實(shí)現(xiàn)
3.1 Qt/E圖形顯示的體系架構(gòu)
完成了數(shù)據(jù)的通信之后,下一步就是要完成如何將接收到的數(shù)據(jù)進(jìn)行顯示的問(wèn)題,這樣就涉及到Qt/E圖形顯示的體系架構(gòu)。
Qt/E圖形顯示的體系架構(gòu)如圖6所示,由3層組成:
(1) 圖形引擎及事件驅(qū)動(dòng)層:在此層當(dāng)中,輸入設(shè)備驅(qū)動(dòng)產(chǎn)生事件,調(diào)用和直接訪問(wèn)Linux操作系統(tǒng)的framebuffer(幀緩沖)中的數(shù)據(jù)內(nèi)容。
(2) 上層圖形層:在此層當(dāng)中向上提供了圖形的抽象供用戶使用,向下抽象出了具體操作接口供顯示設(shè)備使用。
(3) 上層控件層:在此層當(dāng)中,用戶通過(guò)Qwidget類完成操作界面的設(shè)計(jì)[9]。
圖6 Qt/E總體架構(gòu)
3.2 人機(jī)交互界面的設(shè)計(jì)
本設(shè)計(jì)采用觸摸屏作為人機(jī)交互的的硬件設(shè)備,通過(guò)Qt編寫GUI(圖形用戶界面)在觸摸屏上顯示,用戶可以通過(guò)觸碰觸摸屏實(shí)現(xiàn)人機(jī)交互。Qt編寫GUI如圖7所示,該GUI界面主要包括:串口參數(shù)設(shè)置、實(shí)時(shí)數(shù)據(jù)顯示區(qū)域和用戶控制按鍵。其中串口參數(shù)設(shè)置參數(shù)包括串口編號(hào)、波特率、數(shù)據(jù)位、校驗(yàn)位、停止位。用戶控制按鍵部分包括open(打開(kāi)串口)、help(在線幫助文檔)、start(開(kāi)始采集數(shù)據(jù)并繪制波形)、quit(退出)。
圖7 GUI分布圖
3.3 繪制實(shí)時(shí)曲線的步驟
在Qt的內(nèi)部通信機(jī)制中,處于核心地位的是信號(hào)和槽機(jī)制,它完成的是對(duì)象與對(duì)象之間的通信。這種機(jī)制也是Qt區(qū)別于其他GUI工具的主要特點(diǎn),運(yùn)用這種通信機(jī)制可以避免其他GUI工具中在執(zhí)行每種行為后所需的回調(diào)函數(shù),在完成繁雜的函數(shù)指針相同功能的同時(shí)且不致系統(tǒng)崩潰的危險(xiǎn)。該機(jī)制是通過(guò)一個(gè)對(duì)象發(fā)出信號(hào),另一個(gè)對(duì)象通過(guò)槽函數(shù)予以響應(yīng),之間通過(guò)connect函數(shù)加以連接[10] 。在本設(shè)計(jì)中,首先采用信號(hào)和槽機(jī)制對(duì)串口定時(shí)的訪問(wèn)。
在Qwidget.cpp文件中代碼如下:
void MyImgTest::read()
{ myscene->cData= m_pCom->readAll()
myscene->drawWave(); }
connect(m_pTimer1,SIGNAL(timeout()),this,SLOT(read()));
其次設(shè)置畫筆的相關(guān)參數(shù)。
在SahuWaveScene.cpp中代碼如下:
m_waveDataPen.setStyle(Qt::SolidLine); //設(shè)置實(shí)線畫線
m_waveDataPen.setColor(Qt::red); //設(shè)置紅色畫筆
m_waveDataPen.setWidthF(1); //設(shè)置線寬為一個(gè)像素
最后,完成曲線繪制的功能。以QGraphicsScene作為顯示區(qū)域的父對(duì)象,在QGraphicsItems類下的定義QList鏈表來(lái)存儲(chǔ)曲線的各個(gè)點(diǎn)的[y]坐標(biāo)數(shù)據(jù),其QList值類型為T。借助 QList的push_back功能(類似于附加的方式),將每次通過(guò)串口收到的數(shù)據(jù)附加到列表的末尾,再通過(guò)上一步定義好的畫筆addLine添加上連線。由于QList屬于一種鏈表,所以通過(guò)這樣的方式可以實(shí)現(xiàn)曲線的描繪不會(huì)出現(xiàn)丟失數(shù)據(jù)的情況。
在SahuWaveScene.cpp中代碼如下:
QList
//定義QList列表,存儲(chǔ)[y]值
m_waveList.push_back((QGraphicsItem*)this->addLine(QLineF(p1,p2),m_waveDataPen;
最終實(shí)時(shí)曲線顯示效果如圖8所示。
圖8 實(shí)時(shí)曲線顯示效果圖
3.4 完成數(shù)據(jù)的保存
QTextStream類,它提供了使用QIODevice讀寫文本的基本功能并且支持如源代碼、超文本標(biāo)記語(yǔ)言、可擴(kuò)展標(biāo)示語(yǔ)言等其他文本格式的文件。本設(shè)計(jì)中,繪制曲線的同時(shí)將坐標(biāo)數(shù)據(jù)寫入date.txt文檔,然后將該文件復(fù)制到目標(biāo)文件[9]。
具體代碼如下:
QFile file( "date.txt" );
//定義了一個(gè)名date.txt為QFile文件
QDir::setCurrent( "/opt" ); //設(shè)置文件的存放路徑
file.open(QIODevice::Append);
//設(shè)置以追加方式打開(kāi)寫入文件
if ( file.open(QFile::Append) )
{QTextStream stream(&myscene->cData);
//文件流QTextStream將坐標(biāo)數(shù)據(jù)寫入文件
if(myscene->cData.count()==256)
stream << "\n";}
file.close();
4 結(jié) 論
本方案通過(guò)FPGA+ARM的實(shí)時(shí)數(shù)據(jù)采集的嵌入式的硬件平臺(tái)和輔以Qt下的串口通信傳輸、QGraphicsScene類和QList類實(shí)時(shí)曲線描繪的軟件平臺(tái)共同完成了該數(shù)據(jù)采集與顯示系統(tǒng),經(jīng)過(guò)試驗(yàn)證明該系統(tǒng)很好地滿足了采集數(shù)據(jù)的快速性、數(shù)據(jù)傳輸?shù)姆€(wěn)定性、曲線繪制的實(shí)時(shí)性且已成功應(yīng)用于手持便攜式礦物探測(cè)領(lǐng)域,而且其速度快、體積小、重量輕、資源豐富、可靠性高等優(yōu)點(diǎn)對(duì)于數(shù)據(jù)檢測(cè)、高速數(shù)據(jù)的采集等領(lǐng)域也有著非常廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 朱曉鵬.ARM+FPGA的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(13):3088?3090.
[2] 三星公司.S3C2440A (Revision 1)數(shù)據(jù)手冊(cè)[M].韓國(guó):三星公司,2004.
[3] 程燕勝.基于ARM+FPGA 的微陀螺儀數(shù)據(jù)采集處理系統(tǒng)設(shè)計(jì)[J].傳感器與微系統(tǒng),2013,32(8):75?77.
[4] 譚浩強(qiáng).C++程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2006.
[5] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].2版.北京:北京航空航天大學(xué)出版社,2008.
[6] 韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.
[7] 任韜.Qt跨平臺(tái)數(shù)字化壓力測(cè)量分析監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2012,20(9):181?183.
[8]孟繁磊.基于Linux和Qt的串口通信調(diào)試器調(diào)的設(shè)計(jì)及應(yīng)用[J].科技創(chuàng)新導(dǎo)報(bào),2011(32):24?25.
[9] 狄輝輝.基于Qt/E的嵌入式實(shí)時(shí)曲線顯示界面設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2011,34(12):59?61.
[10] [美]索林.24小時(shí)學(xué)通Qt編程[M].袁鵬飛,譯.北京:人民郵電出版社,2000.
m_waveDataPen.setWidthF(1); //設(shè)置線寬為一個(gè)像素
最后,完成曲線繪制的功能。以QGraphicsScene作為顯示區(qū)域的父對(duì)象,在QGraphicsItems類下的定義QList鏈表來(lái)存儲(chǔ)曲線的各個(gè)點(diǎn)的[y]坐標(biāo)數(shù)據(jù),其QList值類型為T。借助 QList的push_back功能(類似于附加的方式),將每次通過(guò)串口收到的數(shù)據(jù)附加到列表的末尾,再通過(guò)上一步定義好的畫筆addLine添加上連線。由于QList屬于一種鏈表,所以通過(guò)這樣的方式可以實(shí)現(xiàn)曲線的描繪不會(huì)出現(xiàn)丟失數(shù)據(jù)的情況。
在SahuWaveScene.cpp中代碼如下:
QList
//定義QList列表,存儲(chǔ)[y]值
m_waveList.push_back((QGraphicsItem*)this->addLine(QLineF(p1,p2),m_waveDataPen;
最終實(shí)時(shí)曲線顯示效果如圖8所示。
圖8 實(shí)時(shí)曲線顯示效果圖
3.4 完成數(shù)據(jù)的保存
QTextStream類,它提供了使用QIODevice讀寫文本的基本功能并且支持如源代碼、超文本標(biāo)記語(yǔ)言、可擴(kuò)展標(biāo)示語(yǔ)言等其他文本格式的文件。本設(shè)計(jì)中,繪制曲線的同時(shí)將坐標(biāo)數(shù)據(jù)寫入date.txt文檔,然后將該文件復(fù)制到目標(biāo)文件[9]。
具體代碼如下:
QFile file( "date.txt" );
//定義了一個(gè)名date.txt為QFile文件
QDir::setCurrent( "/opt" ); //設(shè)置文件的存放路徑
file.open(QIODevice::Append);
//設(shè)置以追加方式打開(kāi)寫入文件
if ( file.open(QFile::Append) )
{QTextStream stream(&myscene->cData);
//文件流QTextStream將坐標(biāo)數(shù)據(jù)寫入文件
if(myscene->cData.count()==256)
stream << "\n";}
file.close();
4 結(jié) 論
本方案通過(guò)FPGA+ARM的實(shí)時(shí)數(shù)據(jù)采集的嵌入式的硬件平臺(tái)和輔以Qt下的串口通信傳輸、QGraphicsScene類和QList類實(shí)時(shí)曲線描繪的軟件平臺(tái)共同完成了該數(shù)據(jù)采集與顯示系統(tǒng),經(jīng)過(guò)試驗(yàn)證明該系統(tǒng)很好地滿足了采集數(shù)據(jù)的快速性、數(shù)據(jù)傳輸?shù)姆€(wěn)定性、曲線繪制的實(shí)時(shí)性且已成功應(yīng)用于手持便攜式礦物探測(cè)領(lǐng)域,而且其速度快、體積小、重量輕、資源豐富、可靠性高等優(yōu)點(diǎn)對(duì)于數(shù)據(jù)檢測(cè)、高速數(shù)據(jù)的采集等領(lǐng)域也有著非常廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 朱曉鵬.ARM+FPGA的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(13):3088?3090.
[2] 三星公司.S3C2440A (Revision 1)數(shù)據(jù)手冊(cè)[M].韓國(guó):三星公司,2004.
[3] 程燕勝.基于ARM+FPGA 的微陀螺儀數(shù)據(jù)采集處理系統(tǒng)設(shè)計(jì)[J].傳感器與微系統(tǒng),2013,32(8):75?77.
[4] 譚浩強(qiáng).C++程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2006.
[5] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].2版.北京:北京航空航天大學(xué)出版社,2008.
[6] 韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.
[7] 任韜.Qt跨平臺(tái)數(shù)字化壓力測(cè)量分析監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2012,20(9):181?183.
[8]孟繁磊.基于Linux和Qt的串口通信調(diào)試器調(diào)的設(shè)計(jì)及應(yīng)用[J].科技創(chuàng)新導(dǎo)報(bào),2011(32):24?25.
[9] 狄輝輝.基于Qt/E的嵌入式實(shí)時(shí)曲線顯示界面設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2011,34(12):59?61.
[10] [美]索林.24小時(shí)學(xué)通Qt編程[M].袁鵬飛,譯.北京:人民郵電出版社,2000.
m_waveDataPen.setWidthF(1); //設(shè)置線寬為一個(gè)像素
最后,完成曲線繪制的功能。以QGraphicsScene作為顯示區(qū)域的父對(duì)象,在QGraphicsItems類下的定義QList鏈表來(lái)存儲(chǔ)曲線的各個(gè)點(diǎn)的[y]坐標(biāo)數(shù)據(jù),其QList值類型為T。借助 QList的push_back功能(類似于附加的方式),將每次通過(guò)串口收到的數(shù)據(jù)附加到列表的末尾,再通過(guò)上一步定義好的畫筆addLine添加上連線。由于QList屬于一種鏈表,所以通過(guò)這樣的方式可以實(shí)現(xiàn)曲線的描繪不會(huì)出現(xiàn)丟失數(shù)據(jù)的情況。
在SahuWaveScene.cpp中代碼如下:
QList
//定義QList列表,存儲(chǔ)[y]值
m_waveList.push_back((QGraphicsItem*)this->addLine(QLineF(p1,p2),m_waveDataPen;
最終實(shí)時(shí)曲線顯示效果如圖8所示。
圖8 實(shí)時(shí)曲線顯示效果圖
3.4 完成數(shù)據(jù)的保存
QTextStream類,它提供了使用QIODevice讀寫文本的基本功能并且支持如源代碼、超文本標(biāo)記語(yǔ)言、可擴(kuò)展標(biāo)示語(yǔ)言等其他文本格式的文件。本設(shè)計(jì)中,繪制曲線的同時(shí)將坐標(biāo)數(shù)據(jù)寫入date.txt文檔,然后將該文件復(fù)制到目標(biāo)文件[9]。
具體代碼如下:
QFile file( "date.txt" );
//定義了一個(gè)名date.txt為QFile文件
QDir::setCurrent( "/opt" ); //設(shè)置文件的存放路徑
file.open(QIODevice::Append);
//設(shè)置以追加方式打開(kāi)寫入文件
if ( file.open(QFile::Append) )
{QTextStream stream(&myscene->cData);
//文件流QTextStream將坐標(biāo)數(shù)據(jù)寫入文件
if(myscene->cData.count()==256)
stream << "\n";}
file.close();
4 結(jié) 論
本方案通過(guò)FPGA+ARM的實(shí)時(shí)數(shù)據(jù)采集的嵌入式的硬件平臺(tái)和輔以Qt下的串口通信傳輸、QGraphicsScene類和QList類實(shí)時(shí)曲線描繪的軟件平臺(tái)共同完成了該數(shù)據(jù)采集與顯示系統(tǒng),經(jīng)過(guò)試驗(yàn)證明該系統(tǒng)很好地滿足了采集數(shù)據(jù)的快速性、數(shù)據(jù)傳輸?shù)姆€(wěn)定性、曲線繪制的實(shí)時(shí)性且已成功應(yīng)用于手持便攜式礦物探測(cè)領(lǐng)域,而且其速度快、體積小、重量輕、資源豐富、可靠性高等優(yōu)點(diǎn)對(duì)于數(shù)據(jù)檢測(cè)、高速數(shù)據(jù)的采集等領(lǐng)域也有著非常廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 朱曉鵬.ARM+FPGA的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(13):3088?3090.
[2] 三星公司.S3C2440A (Revision 1)數(shù)據(jù)手冊(cè)[M].韓國(guó):三星公司,2004.
[3] 程燕勝.基于ARM+FPGA 的微陀螺儀數(shù)據(jù)采集處理系統(tǒng)設(shè)計(jì)[J].傳感器與微系統(tǒng),2013,32(8):75?77.
[4] 譚浩強(qiáng).C++程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2006.
[5] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].2版.北京:北京航空航天大學(xué)出版社,2008.
[6] 韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.
[7] 任韜.Qt跨平臺(tái)數(shù)字化壓力測(cè)量分析監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2012,20(9):181?183.
[8]孟繁磊.基于Linux和Qt的串口通信調(diào)試器調(diào)的設(shè)計(jì)及應(yīng)用[J].科技創(chuàng)新導(dǎo)報(bào),2011(32):24?25.
[9] 狄輝輝.基于Qt/E的嵌入式實(shí)時(shí)曲線顯示界面設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2011,34(12):59?61.
[10] [美]索林.24小時(shí)學(xué)通Qt編程[M].袁鵬飛,譯.北京:人民郵電出版社,2000.