新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式技術的靶場破片測速系統設計

        基于嵌入式技術的靶場破片測速系統設計

        作者: 時間:2011-02-21 來源:網絡 收藏


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

        4 結語
        系統綜合利用了的優點,在基于+的平臺上設計出靶場破片測速系統;在架構于Linux的平臺上設計了基于Qt/E的嵌入式交互程序,并且針對嵌入式設備的不足,提出Qt/E程序的優化意見和方法。系統經過試驗檢測,能夠順利完成靶場測速任務。系統設計結構清晰、條理嚴整、程序健壯,這種系統設計結構和對Qt/E程序的優化思想對同類設計具有較大的參考意義。


        上一頁 1 2 3 下一頁

        關鍵詞: ARM FPGA

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 三穗县| 天祝| 荥经县| 房山区| 商洛市| 南城县| 石泉县| 乌拉特中旗| 鹤峰县| 元氏县| 诏安县| 三门县| 上林县| 叙永县| 武城县| 沐川县| 蓬莱市| 旺苍县| 鲁山县| 阿拉善盟| 泽库县| 邓州市| 岳阳县| 临清市| 静安区| 游戏| 板桥市| 平远县| 舒兰市| 南木林县| 卓尼县| 尤溪县| 余姚市| 大理市| 丰台区| 靖江市| 鄱阳县| 上饶县| 淅川县| 噶尔县| 班戈县|