文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2015)05-0043-03
0 引言
LFMCW(線性調(diào)頻連續(xù)波雷達(dá))具有CW雷達(dá)發(fā)射功率小的特點,更兼有脈沖雷達(dá)測距的能力,廣泛應(yīng)用于導(dǎo)航、測量等領(lǐng)域[1]?;?a class="innerlink" href="http://theprogrammingfactory.com/tags/多播" title="多播" target="_blank">多播機(jī)制對其組網(wǎng),可以實現(xiàn)多臺雷達(dá)掃描終端與多臺顯示終端同步相連。顯示終端的主要功能包括控制雷達(dá)狀態(tài)和顯示雷達(dá)圖像兩個部分。采用多線程編程,可以讓不同的顯示終端有不同的功能,比如一部分顯示終端只具有顯示雷達(dá)圖像的功能,而另一部分顯示終端同時具有控制和顯示兩個功能(這部分顯示終端可以提供給管理員使用)。由于顯示單元是基于單播機(jī)制,為了提高顯示單元的可移植性,屏蔽雷達(dá)掃描單元和顯示單元通信接口的不同,可以用中間件負(fù)責(zé)兩部分的通信。
DM3730是TI公司生產(chǎn)的雙核(ARM+DSP)架構(gòu)處理器。其低功耗、高性能、低價格的特點深受廣大嵌入式開發(fā)者的喜愛。顯示終端基于DM3730平臺,掃描單元發(fā)送的雷達(dá)數(shù)據(jù)是極坐標(biāo)表示,必須通過坐標(biāo)轉(zhuǎn)換后才能在終端上正常顯示。由于坐標(biāo)轉(zhuǎn)換計算量過大,用ARM處理器實現(xiàn)坐標(biāo)轉(zhuǎn)換算法會大大增加系統(tǒng)負(fù)擔(dān),并且會產(chǎn)生嚴(yán)重的丟包現(xiàn)象。所以將算法實現(xiàn)交給DSP處理。實測發(fā)現(xiàn),經(jīng)過優(yōu)化后的ARM處理器CPU使用率大大降低,雷達(dá)數(shù)據(jù)處理過程中再無丟包現(xiàn)象。
1 系統(tǒng)結(jié)構(gòu)
1.1 物理結(jié)構(gòu)
如圖1所示,雷達(dá)掃描單元由雷達(dá)天線和FPGA組成。雷達(dá)天線負(fù)責(zé)采集雷達(dá)數(shù)據(jù),F(xiàn)PGA負(fù)責(zé)AD采樣,并實現(xiàn)了海雜波抑制、雨雪抑制、海浪抑制等算法。FPGA通過網(wǎng)線將處理好的數(shù)據(jù)發(fā)送至ARM端,ARM端負(fù)責(zé)將接收到的雷達(dá)數(shù)據(jù)作坐標(biāo)轉(zhuǎn)換處理并顯示雷達(dá)圖像[2]。另外,ARM端還負(fù)責(zé)控制雷達(dá)狀態(tài)。
1.2 系統(tǒng)邏輯結(jié)構(gòu)
系統(tǒng)邏輯結(jié)構(gòu)如圖2所示。多播使用D類地址作為IP地址,應(yīng)用程序可以通過加入一個或者多個多播組,從而僅接收所在多播組的數(shù)據(jù)[3]。多播組1~4分別代表雷達(dá)控制信息多播組、雷達(dá)數(shù)據(jù)多播組、雷達(dá)狀態(tài)反饋信息多播組、keepalive多播組。中間件與UI顯示單元的連接方式是單播機(jī)制。加入雷達(dá)控制信息多播組的成員可以發(fā)送控制指令給該多播組的雷達(dá)掃描單元,從而控制其狀態(tài)。加入雷達(dá)數(shù)據(jù)多播組的成員可以接收到FPGA處理好的雷達(dá)數(shù)據(jù)。加入雷達(dá)反饋信息多播組的成員可以接收到雷達(dá)自身狀態(tài)的反饋信息,比如當(dāng)前量程、增益等[4]。反饋系統(tǒng)是為了增強(qiáng)雷達(dá)顯示系統(tǒng)的實時性和健壯性。Keepalive多播組比較特殊,雷達(dá)掃描單元會定期檢查該多播組有無keepalive指令,如果10 s內(nèi)沒有收到該指令,則自動關(guān)機(jī)。所以,中間件必須加入該多播組并不斷發(fā)送keepalive指令才能保證雷達(dá)持續(xù)工作。GPS傳感器和AIS傳感器將采集和處理后的數(shù)據(jù)發(fā)送至串口,中間件從串口搜集這些數(shù)據(jù),解析打包后通過socket發(fā)送至UI??梢?,中間件可以選擇加入這幾個多播組的一個或者全部,從而擁有不同的功能組合。在這種邏輯結(jié)構(gòu)下,中間件使得UI顯示單元抽象了所有的數(shù)據(jù)來源,它只負(fù)責(zé)接收網(wǎng)絡(luò)數(shù)據(jù)、顯示圖像以及響應(yīng)鼠標(biāo)鍵盤事件。
2 中間件功能設(shè)計與實現(xiàn)
中間件是連接兩個獨立應(yīng)用程序的橋梁。兩個或多個具有不同通信接口的應(yīng)用程序通過中間件依然可以正常通信。所以,中間件能屏蔽不同的接口,幫助用戶靈活、高效地開發(fā)應(yīng)用程序,并大大提高應(yīng)用程序的可移植性[5],這在嵌入式應(yīng)用中意義重大。
基于以上分析,本中間件軟件主要實現(xiàn)5個功能:(1)控制雷達(dá)狀態(tài);(2)接收處理雷達(dá)掃描數(shù)據(jù);(3)接收處理雷達(dá)反饋信息;(4)發(fā)送keepalive指令;(5)提供其他功能接口,如GPS和AIS。采用多線程編程來實現(xiàn)這些功能。下面重點介紹雷達(dá)狀態(tài)控制和雷達(dá)數(shù)據(jù)接收處理的實現(xiàn)流程。
2.1 雷達(dá)狀態(tài)控制
雷達(dá)控制流程如圖3所示。協(xié)議1是UI顯示單元和中間件控制命令協(xié)議,協(xié)議2是中間件與掃描單元控制命令協(xié)議。
ARM端可以將雷達(dá)掃描單元視為一個通過網(wǎng)絡(luò)控制的移位寄存器組,通過設(shè)置這些寄存器就可以改變雷達(dá)的狀態(tài)。
雷達(dá)控制命令包括開關(guān)機(jī)、增益調(diào)節(jié)、量程調(diào)節(jié)、海雜波抑制調(diào)節(jié)、雨雪抑制調(diào)節(jié)、掃描單元轉(zhuǎn)速等。UI顯示單元通過響應(yīng)鼠標(biāo)或觸摸屏事件發(fā)送命令給中間件;中間件解析并根據(jù)協(xié)議2重新合成報文發(fā)送至多播組1;掃描單元接收并解析多播組的命令,設(shè)置移位寄存器,從而改變雷達(dá)運行狀態(tài)。
2.2 數(shù)據(jù)接收處理流程
數(shù)據(jù)處理流程如圖4所示。其中,協(xié)議3為雷達(dá)與中間件的數(shù)據(jù)協(xié)議,協(xié)議4為中間件與UI顯示單元的數(shù)據(jù)協(xié)議。雷達(dá)掃描原始數(shù)據(jù)預(yù)先已經(jīng)經(jīng)過FPGA處理,這里的雷達(dá)數(shù)據(jù)是極坐標(biāo)雷達(dá)掃描線數(shù)字信號。中間件通過加入多播組2從而接收到完整的掃描數(shù)據(jù)。由于UI顯示直角坐標(biāo)數(shù)據(jù)較為通用和方便,所以中間件一個重要功能是坐標(biāo)轉(zhuǎn)換。
2.3 數(shù)據(jù)處理過程中單核ARM性能的不足
如圖5所示是FPGA發(fā)送至ARM端的雷達(dá)數(shù)據(jù)格式,ns代表線號,a代表掃描線角度。每包雷達(dá)數(shù)據(jù)由32條掃描線構(gòu)成,每條線536 bit,每包數(shù)據(jù)17 160 bit,雷達(dá)掃描單元轉(zhuǎn)速V為2.4 s/rad,每一圈數(shù)據(jù)包含64個包。所以,必須在37 ms內(nèi)處理完一個數(shù)據(jù)包,否則將產(chǎn)生丟包現(xiàn)象。實測發(fā)現(xiàn),ARM處理每包的時間是100 ms左右,遠(yuǎn)遠(yuǎn)未達(dá)到要求,并且中間件CPU占有率高達(dá)40%,進(jìn)行雷達(dá)控制操作時甚至出現(xiàn)卡頓現(xiàn)象。為了解決丟包問題和降低中間件CPU占有率,將坐標(biāo)轉(zhuǎn)換算法實現(xiàn)交給DPS處理是一個非常好的選擇。
3 算法移植
DM3730微處理器由1 GHz的ARM Cortex-A8 Core和800 MHz的TMS320C64x+ DSP Core兩部分組成,并提供了一整套完整的開發(fā)套件。
3.1 內(nèi)存劃分
如圖6所示,將物理內(nèi)存的前120 MB劃分給ARM處理器用于Linux操作系統(tǒng);CMEM是ARM和DSP用于數(shù)據(jù)通信的內(nèi)存區(qū)域,大小為10 MB;Dsplink是用于ARM與DSP底層通信的區(qū)域,大小為1 MB;Heaps是DSP運行算法時的堆。ARM處理器和DSP處理器共享256 MB內(nèi)存,ARM端運行Linux操作系統(tǒng),DSP端運行實時操作系統(tǒng)。ARM端把這段內(nèi)存通過MMU映射成虛擬內(nèi)存,而DPS端直接使用物理地址。由于Linux的內(nèi)存管理機(jī)制,程序員只能通過malloc()函數(shù)來為應(yīng)用程序分配內(nèi)存。程序員不僅不能控制這段內(nèi)存在物理內(nèi)存上的位置,甚至不知道這些被分成4 KB每頁的內(nèi)存是否是物理連續(xù)的[6]。相反,DPS端的實時操作系統(tǒng)可以直接操作物理地址。所以,為了使ARM進(jìn)程(應(yīng)用控制)和DSP(算法加速)的內(nèi)存共享,必須從DDR3嚴(yán)格劃分出一塊內(nèi)存供其共享。這塊內(nèi)存的大小是可以指定并且是物理連續(xù)的,這段內(nèi)存不會被Linux系統(tǒng)直接管理,通過指定的方法,ARM端應(yīng)用程序可以訪問這段內(nèi)存。
TI公司的DVSDK開發(fā)套件提供模塊cmemk.ko為ARM和DSP通信提供連續(xù)的內(nèi)存。
3.2 實現(xiàn)流程
如圖7所示是ARM+DSP雙核工作原理,ARM端將DSP視為一個標(biāo)準(zhǔn)API接口,可以直接調(diào)用DSP處理數(shù)據(jù),DSP負(fù)責(zé)實際的算法實現(xiàn)。實現(xiàn)步驟分為以下4步:
(1)完成Codec庫的開發(fā)。將坐標(biāo)轉(zhuǎn)換算法按照xDM標(biāo)準(zhǔn)封裝成Codec庫。
(2)將Codec庫集成到Codec Engine中,使用gmake命令生成擴(kuò)展名為*.X64P的庫,此庫即為DSP被調(diào)用時直接加載運行的算法庫。
(3)調(diào)用gmake生成和*.X64P相對應(yīng)的*.so庫,在中間件程序中動態(tài)加載該庫即可調(diào)用DSP進(jìn)行坐標(biāo)轉(zhuǎn)換。
(4)編譯和加載CMEM模塊和Dsplink模塊,完成物理內(nèi)存劃分。
4 實驗與測試
實驗效果圖如圖8、圖9所示,圖8(a)和8(b)分別為不調(diào)用DSP核和調(diào)用DSP核的雷達(dá)顯示圖像,可以看出調(diào)用DSP核時解決了丟包現(xiàn)象,雷達(dá)圖像左下再無空數(shù)據(jù)。圖9(a)和9(b)分別為不調(diào)用DSP核和調(diào)用DSP核時的CPU占有率,rd_demeon即為中間件軟件??梢钥闯觯徽{(diào)用DSP核時中間件的CPU占有率高達(dá)近40%,而調(diào)用DSP核后將中間件的CPU占有率降低到20%,節(jié)約了寶貴的CPU資源。
5 結(jié)論
本文通過設(shè)計和實現(xiàn)一個中間件軟件,屏蔽了基于多播機(jī)制的雷達(dá)掃描單元和基于單播機(jī)制的雷達(dá)顯示單元通信接口的不同,實現(xiàn)了多個掃描單元和多個顯示單元同步相連,并可以通過裁剪中間件軟件功能,讓不同的顯示單元有不同的功能。ARM端通過標(biāo)準(zhǔn)的API接口調(diào)用DSP核處理數(shù)據(jù),不僅解決了單核ARM處理器處理數(shù)據(jù)時性能不足而產(chǎn)生的丟包現(xiàn)象,而且節(jié)約了寶貴的CPU資源,解決了由于硬件資源的限制而產(chǎn)生的頓卡現(xiàn)象。測試結(jié)果表明,加入中間件后雷達(dá)顯示系統(tǒng)運行效果良好,達(dá)到了預(yù)期的效果。
參考文獻(xiàn)
[1] 楊建宇.線性調(diào)頻連續(xù)波雷達(dá)理論與實現(xiàn)[D].成都:電子科技大學(xué),1991.
[2] 范多亮.雷達(dá)顯示終端中的死點分析[J].信息化研究,2010,36(3):13-15.
[3] 謝希仁.計算機(jī)網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,2008.
[4] 陳筱倩,周陬,王宏遠(yuǎn).基于IP組播的流媒體服務(wù)器軟件設(shè)計[J].微電子學(xué)與計算機(jī),2004(12):76-80.
[5] 張云勇.中間件技術(shù)原理與應(yīng)用[M].北京:清華大學(xué)出版社,2010.
[6] BOVET D P,CESATI M.深入理解Linux內(nèi)核[M].陳莉君,張瓊聲,張宏偉,譯.北京:中國電力出版社,2007.