文獻(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://forexkbc.com/tags/多播" title="多播" target="_blank">多播機制對其組網(wǎng),,可以實現(xiàn)多臺雷達(dá)掃描終端與多臺顯示終端同步相連。顯示終端的主要功能包括控制雷達(dá)狀態(tài)和顯示雷達(dá)圖像兩個部分,。采用多線程編程,,可以讓不同的顯示終端有不同的功能,比如一部分顯示終端只具有顯示雷達(dá)圖像的功能,,而另一部分顯示終端同時具有控制和顯示兩個功能(這部分顯示終端可以提供給管理員使用),。由于顯示單元是基于單播機制,為了提高顯示單元的可移植性,,屏蔽雷達(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顯示單元的連接方式是單播機制。加入雷達(dá)控制信息多播組的成員可以發(fā)送控制指令給該多播組的雷達(dá)掃描單元,,從而控制其狀態(tài),。加入雷達(dá)數(shù)據(jù)多播組的成員可以接收到FPGA處理好的雷達(dá)數(shù)據(jù)。加入雷達(dá)反饋信息多播組的成員可以接收到雷達(dá)自身狀態(tài)的反饋信息,,比如當(dāng)前量程,、增益等[4]。反饋系統(tǒng)是為了增強雷達(dá)顯示系統(tǒng)的實時性和健壯性,。Keepalive多播組比較特殊,,雷達(dá)掃描單元會定期檢查該多播組有無keepalive指令,如果10 s內(nèi)沒有收到該指令,,則自動關(guān)機,。所以,,中間件必須加入該多播組并不斷發(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)機,、增益調(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%,,進行雷達(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)存管理機制,,程序員只能通過malloc()函數(shù)來為應(yīng)用程序分配內(nèi)存,。程序員不僅不能控制這段內(nèi)存在物理內(nèi)存上的位置,甚至不知道這些被分成4 KB每頁的內(nèi)存是否是物理連續(xù)的[6],。相反,,DPS端的實時操作系統(tǒng)可以直接操作物理地址。所以,,為了使ARM進程(應(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命令生成擴展名為*.X64P的庫,,此庫即為DSP被調(diào)用時直接加載運行的算法庫。
(3)調(diào)用gmake生成和*.X64P相對應(yīng)的*.so庫,,在中間件程序中動態(tài)加載該庫即可調(diào)用DSP進行坐標(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)一個中間件軟件,,屏蔽了基于多播機制的雷達(dá)掃描單元和基于單播機制的雷達(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] 謝希仁.計算機網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,,2008.
[4] 陳筱倩,,周陬,王宏遠(yuǎn).基于IP組播的流媒體服務(wù)器軟件設(shè)計[J].微電子學(xué)與計算機,,2004(12):76-80.
[5] 張云勇.中間件技術(shù)原理與應(yīng)用[M].北京:清華大學(xué)出版社,,2010.
[6] BOVET D P,CESATI M.深入理解Linux內(nèi)核[M].陳莉君,,張瓊聲,,張宏偉,譯.北京:中國電力出版社,,2007.