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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式技術(shù)的靶場(chǎng)破片測(cè)速系統(tǒng)設(shè)計(jì)

          基于嵌入式技術(shù)的靶場(chǎng)破片測(cè)速系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2011-02-21 來源:網(wǎng)絡(luò) 收藏


          按照系統(tǒng)應(yīng)用要求,將GUI設(shè)計(jì)分為:參數(shù)設(shè)置模塊、系統(tǒng)測(cè)試模塊、結(jié)果查看模塊和存儲(chǔ)管理模塊四個(gè)模塊。參數(shù)設(shè)置模塊負(fù)責(zé)對(duì)破片測(cè)速系統(tǒng)所需要的各種參數(shù)進(jìn)行設(shè)置,主要包括標(biāo)靶分組、標(biāo)靶間距、標(biāo)靶類型、最長(zhǎng)計(jì)數(shù)時(shí)間。在設(shè)置過程中,GUI自動(dòng)對(duì)所設(shè)置的參數(shù)進(jìn)行檢測(cè),如果參數(shù)設(shè)置不正確,將產(chǎn)生錯(cuò)誤提示。系統(tǒng)測(cè)試模塊負(fù)責(zé)在試驗(yàn)前對(duì)整個(gè)系統(tǒng)進(jìn)行測(cè)試。通過人為給出觸發(fā)信號(hào)可在LCD上可視化的查看系統(tǒng)是否正常工作,通道可否正常觸發(fā),可否正常計(jì)數(shù)等。結(jié)果查看模塊負(fù)責(zé)對(duì)測(cè)試結(jié)果進(jìn)行顯示。在試驗(yàn)完成,獲得測(cè)試數(shù)據(jù)后,經(jīng)過運(yùn)算,就可以表格和分布圖兩種方式給出破片的觸發(fā)時(shí)刻值和速度值,快速直觀。存儲(chǔ)管理模塊負(fù)責(zé)系統(tǒng)參數(shù)及測(cè)試數(shù)據(jù)的保存和
          讀取,以進(jìn)行試驗(yàn)數(shù)據(jù)的進(jìn)一步分析。系統(tǒng)擁有脫機(jī)設(shè)置功能,即可在試驗(yàn)前未連接標(biāo)靶的情況下,脫機(jī)進(jìn)行參數(shù)設(shè)置,設(shè)置完畢后可保存所有設(shè)置參數(shù)。試驗(yàn)時(shí),只要選擇保存的參數(shù)就可直接載入脫機(jī)設(shè)置的參數(shù),極大增強(qiáng)了系統(tǒng)工作的靈活性。
          3.2 Qt/E程序優(yōu)化
          嵌入式設(shè)備的顯著特點(diǎn)是CPU主頻不高,資源有限。因?yàn)檫@個(gè)局限性,許多在計(jì)算機(jī)上運(yùn)行流暢的Qt/E程序在嵌入式設(shè)備上反應(yīng)滯后,在極端情況下甚至?xí)霈F(xiàn)短暫的界面凍結(jié)現(xiàn)象。為了提高嵌入式GUI的反應(yīng)速度,對(duì)Qt/E應(yīng)用程序設(shè)計(jì)就提出了更高的要求。本文在界面設(shè)計(jì)中,針對(duì)GUI運(yùn)行中出現(xiàn)的問題,對(duì)Qt/E程序進(jìn)行了一些優(yōu)化,經(jīng)過優(yōu)化后,界面的反應(yīng)速度明顯改善。
          3.2.1 采用靜態(tài)鏈接代替動(dòng)態(tài)鏈接
          與靜態(tài)鏈接相比,動(dòng)態(tài)鏈接的優(yōu)勢(shì)在于動(dòng)態(tài)庫(kù)可被多個(gè)進(jìn)程復(fù)用,從而減少了對(duì)系統(tǒng)內(nèi)存的使用。但是動(dòng)態(tài)鏈接的這種優(yōu)越性是有代價(jià)的,由于進(jìn)程在初始化時(shí)要加載并且初始化大量的動(dòng)態(tài)庫(kù),當(dāng)需要加載的動(dòng)態(tài)庫(kù)比較多或者動(dòng)態(tài)庫(kù)比較龐大時(shí),直接的影響就是降低進(jìn)程啟動(dòng)速度;另外一個(gè)影響是系統(tǒng)運(yùn)行時(shí)因?yàn)楹瘮?shù)的鏈接也要耗費(fèi)一些時(shí)間。
          嵌入式Qt/E程序如果使用動(dòng)態(tài)鏈接就面臨這個(gè)問題。一般來說,為了保證程序的基本功能,即使經(jīng)過裁減后,Qt/E動(dòng)態(tài)庫(kù)也有將近10 MB大小,這些動(dòng)態(tài)庫(kù)在嵌入式平臺(tái)上的加載將耗費(fèi)大量時(shí)間。針對(duì)這個(gè)問題,一種解決方法是采用prelink預(yù)鏈接的方法先確定每一個(gè)動(dòng)態(tài)庫(kù)在內(nèi)存的加載位置,從而省去動(dòng)態(tài)庫(kù)重定位這一過程。但是這種方法的步驟比較繁瑣,使用上存在一些限定要求,在這里并不推薦。
          由于本系統(tǒng)設(shè)計(jì)為專用系統(tǒng),僅有一個(gè)GUI程序,可采取對(duì)Qt/E庫(kù)靜態(tài)鏈接的方式來提高啟動(dòng)和運(yùn)行速度。具體過程是,在用configure配置Qt/E庫(kù)編譯選項(xiàng)時(shí)使用-static選項(xiàng)把Qt/E庫(kù)源文件編譯成靜態(tài)庫(kù),在編譯Qt/E程序時(shí)選擇鏈接庫(kù)為靜態(tài)庫(kù)。經(jīng)過測(cè)試,采用靜態(tài)鏈接的方式,由于在進(jìn)程初始化時(shí)不用再去加載Qt/E的動(dòng)態(tài)庫(kù),極大提高了進(jìn)程的啟動(dòng)速度;在運(yùn)行過程中,由于節(jié)省了函數(shù)鏈接時(shí)間,程序的運(yùn)行速度有所提高;同時(shí)雖然Qt/E程序本身變得龐大,但是由于不用再安裝Qt/E動(dòng)態(tài)庫(kù),故占用的FLASH空間有限。
          3.2.2 使用基礎(chǔ)控件代替復(fù)合控件
          加快界面反應(yīng)速度最直接有效的方法就是減少界面中的控件數(shù),這里的控件數(shù),準(zhǔn)確地說,指的是QWidget等基礎(chǔ)控件的數(shù)量。在實(shí)際程序設(shè)計(jì)過程中,一個(gè)有效設(shè)計(jì)方法是對(duì)一些復(fù)合控件盡可能使用基礎(chǔ)控件代替。Qt/E中提供了許多功能強(qiáng)大的復(fù)合控件,這些復(fù)合控件通常是由多個(gè)基礎(chǔ)控件復(fù)合而成的,雖然操作方便,但是資源消耗也比較多,從而影響了整個(gè)界面的運(yùn)行。以表格的繪制為例,如果表格使用復(fù)合控件QTableWidget實(shí)現(xiàn),表格的每一個(gè)表項(xiàng)都作為一個(gè)子控件存在。每一次刷新表格都需要調(diào)用每個(gè)子控件的paintEvent()函數(shù),子控件越多,函數(shù)調(diào)用次數(shù)相應(yīng)的也越多,極大地占用了CPU時(shí)間,極端情況下甚至?xí)捎趐aintEvent事件過多而堵塞事件隊(duì)列,影響界面的正常運(yùn)行。而如果用基礎(chǔ)控件QWidget實(shí)現(xiàn)表格,只需調(diào)用一次基礎(chǔ)控件的paintEvent()就可以在paintEvent()函數(shù)中自定義實(shí)現(xiàn)表格的繪制,雖然書寫代碼量可能會(huì)大一些,但是函數(shù)調(diào)用次數(shù)少,并且可以做到對(duì)表格每一個(gè)局部刷新區(qū)域的有效控制,避免許多無(wú)用操作,在嵌入式平臺(tái)上,反應(yīng)速度明顯加快。
          3.2.3 采用延遲刷新方法
          當(dāng)不可避免要用到復(fù)合控件時(shí),如果用到的復(fù)合控件構(gòu)成復(fù)雜、刷新耗時(shí),為了盡可能降低這些復(fù)合控件對(duì)整體界面運(yùn)行的影響,可借鑒雙緩沖繪圖的思想,用延遲刷新的方法來控制這些復(fù)合控件的刷新。
          傳統(tǒng)的雙緩沖繪圖是在內(nèi)存中開辟一塊緩沖區(qū),將緩沖區(qū)看作一幅位圖,先用背景色填充這幅位圖,然后在這幅位圖上繪制用戶圖形,最后顯示這幅位圖到窗口中。
          由于在后臺(tái)已完成了界面繪制,采用雙緩沖繪圖,可有效消除閃爍。參考雙緩沖繪圖的做法,為了解決耗時(shí)復(fù)合控件和整個(gè)界面在刷新時(shí)的矛盾,本文的思路是當(dāng)界面,需要刷新時(shí)先不刷新復(fù)合控件,而是在背景上用一幅畫布替代復(fù)合控件區(qū)域,當(dāng)界面刷新完畢后,再進(jìn)行復(fù)合控件的刷新。經(jīng)過測(cè)試,這種方法特別適合于復(fù)合控件變化較小而整個(gè)界面需要刷新的情況。具體做法是在確定了耗時(shí)復(fù)合控件后,當(dāng)需要刷新界面時(shí),構(gòu)造一幅畫布QPixmap,利用QPixmap::grabWindow()函數(shù)在畫布上繪制出該復(fù)合控件所占區(qū)域圖形,由于這個(gè)函數(shù)只是對(duì)窗口像素點(diǎn)進(jìn)行繪制,并不調(diào)用控件的paintEvent()函數(shù),而嵌入式設(shè)備的分辨率一般不高,因而花費(fèi)時(shí)間有限;對(duì)復(fù)合控件利用setUp-dateEnable(false)函數(shù)禁用復(fù)合控件刷新功能后,調(diào)用QApplieation::proeessEvent()完成界面除復(fù)合控件外所有控件的刷新繪制,并且為了消除閃爍,在父窗口的paintEvent()函數(shù)中調(diào)用QPainter::drawPixmap()函數(shù)將畫布QPixmap繪制于背景的復(fù)合控件區(qū)域上。這時(shí),就可看到界面的刷新效果。由于耗時(shí)復(fù)合控件的禁止刷新,整個(gè)刷新過程將會(huì)快速完成;最后再調(diào)用復(fù)合控件的setUpdateEnable(true)重新使能復(fù)合控件的刷新功能。更進(jìn)一步的方法是,只有當(dāng)耗時(shí)復(fù)合控件變化時(shí)才調(diào)用復(fù)合控件的setUpdateEnable(true)允許刷新操作,其余時(shí)刻均在背景上使用QPixmap繪制代替。采用這種方法相當(dāng)于把耗時(shí)復(fù)合控件的刷新延遲,而先讓界面其他控件完成刷新操作,從而快速顯示界面的刷新效果。

          4 結(jié)語(yǔ)
          系統(tǒng)綜合利用了的優(yōu)點(diǎn),在基于+的平臺(tái)上設(shè)計(jì)出靶場(chǎng)破片測(cè)速系統(tǒng);在架構(gòu)于Linux的平臺(tái)上設(shè)計(jì)了基于Qt/E的嵌入式交互程序,并且針對(duì)嵌入式設(shè)備的不足,提出Qt/E程序的優(yōu)化意見和方法。系統(tǒng)經(jīng)過試驗(yàn)檢測(cè),能夠順利完成靶場(chǎng)測(cè)速任務(wù)。系統(tǒng)設(shè)計(jì)結(jié)構(gòu)清晰、條理嚴(yán)整、程序健壯,這種系統(tǒng)設(shè)計(jì)結(jié)構(gòu)和對(duì)Qt/E程序的優(yōu)化思想對(duì)同類設(shè)計(jì)具有較大的參考意義。


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: ARM FPGA

          評(píng)論


          相關(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); })();