作者:胡敏露;徐剛鋒;李飚
1 引言
在數(shù)字信號處理系統(tǒng)開發(fā)過程中,通常要對算法的正確性進行驗證,也就是程序調(diào)試。而傳統(tǒng)的主機調(diào)試器必須通過在目標應用程序中插入斷點,在中斷目標應用程序運行時觀測目標機上各寄存器或內(nèi)存變量的值。但是,由于處理系統(tǒng)是實時的,因此,這種經(jīng)典的方法不能實時地跟蹤數(shù)據(jù)的變化,有時顯示的數(shù)據(jù)根本就是錯誤的。這種方法的不足在筆者的圖像處理系統(tǒng)中表現(xiàn)得更為突出。且不說它不能實時反映數(shù)據(jù)處理的結(jié)果,即使可以實時反映,在用memoryView方法來觀測圖像處理的結(jié)果時也只是各內(nèi)存單元的值,因而非常不直觀,為故障診斷和系統(tǒng)性能測評等帶來許多不便,所以,必須尋找一種方法來實時跟蹤數(shù)據(jù)變化,而且數(shù)據(jù)還應以非常直觀的形式顯示在主機屏幕上。
TI的Real-Time Data Ex-change(RTDX)技術(shù)就是利用DSPs的內(nèi)部仿真邏輯和JTAG接口來實現(xiàn)主機與目標機之間的數(shù)據(jù)交換,它不占用DSPs的系統(tǒng)總線和串口等I/0資源,數(shù)據(jù)傳送完全可以在應用程序的后臺運行,對應用程序影響很小,它完全可以在不中斷目標應用程序的前提下,向主機實時發(fā)送目標機上各寄存器或內(nèi)存變量的值。而主機上的可視化應用程序也可以通過嵌入COM的APl函數(shù)來獲得這些數(shù)據(jù),并以適當?shù)母袷桨褦?shù)據(jù)顯示出來(如表格、波形圖或二維圖像等形式)。這樣,就可以實時觀測和分析應用程序的運行情況,使得編程人員查找和修改應用程序的錯誤更加方便,從而縮短系統(tǒng)的設計開發(fā)周期。
在設計圖像目標識別系統(tǒng)時,把攝像頭信號通過視頻采集卡進行采樣和量化,并存放在處理機系統(tǒng)的外部存儲器中。為了獲得目標在圖像中的位置,設計時必須對采樣的數(shù)據(jù)進行識別算法處理。因為筆者處理的是連續(xù)圖像幀序列,因而不能在中斷程序運行的情況下觀測處理結(jié)果,而且無法通過只看相應memo~的值來判斷跟蹤窗是否能跟上運動的目標,所以,采用了RTDX技術(shù)。
2 RTDX的原理
RTDX是一種可以在不影響目標應用程序運行的情況下讓主機和目標機進行實時數(shù)據(jù)傳輸?shù)募夹g(shù)。RTDX支持雙向數(shù)據(jù)流,即目標機到主機的數(shù)據(jù)流和主機到目標機的數(shù)據(jù)流。RTDX數(shù)據(jù)流示意圖如圖1所示。
2.1目標機到主機的數(shù)據(jù)傳送
目標機為了向主機發(fā)送數(shù)據(jù),必須設定一個輸出通道oehanData。通過用戶接口可將數(shù)據(jù)送到輸出通道以使這些數(shù)據(jù)隨即保存到RTDX目標機的緩存(由RTDX目標函數(shù)庫定義)中,然后再將這些數(shù)據(jù)通過JTAG接口發(fā)送到主機。RTDX主機函數(shù)庫將接收到的數(shù)據(jù)保存在log文件中或主機的緩存中(具體由RTDX模式來決定)。
保存在log文件中或主機緩存中的數(shù)據(jù)可以通過COM Automation Client重新獲取析。下面是幾種典型的COM Automation Client:
Visual Basic applications;
Visual C++ applications;
Lab View;
Microsoft Excel。
2.2主機到目標機的數(shù)據(jù)傳送
目標機要從主機中獲得數(shù)據(jù),首先必須設定一個輸入通道ichanCmd,來接受主機發(fā)出的命令,從而實現(xiàn)數(shù)據(jù)傳輸?shù)耐?。運行中,系統(tǒng)可通過用戶接口發(fā)送一個讀取數(shù)據(jù)的請求,并將這個請求保存在RTDX目標機的緩存中,然后通過JTAG接口發(fā)送到主機。同時應由COM automation client通過COM接口把要發(fā)送的數(shù)據(jù)先寫入到RTDX主;帆函數(shù)庫中的緩存,以等待目標機讀取數(shù)據(jù)的請求。當RTDX主機函數(shù)庫收到從目標機發(fā)出的讀取數(shù)據(jù)請求時,保存在RTDX主機函數(shù)庫中的數(shù)據(jù)便可通過JTAG接口將數(shù)據(jù)發(fā)送到目標機,從而使該數(shù)據(jù)可以實時寫入目標機指定的存儲區(qū)域。操作完成后,主機會通知RTDX目標機函數(shù)庫。
2.3 RTDX目標機函數(shù)庫的用戶接口和COM接口
利用RTDX目標機函數(shù)庫的用戶接口可實現(xiàn)在目標機DSP應用程序和主機之間進行安全可靠的數(shù)據(jù)交換。同時可利用它完成應用程序向RTDX主機庫發(fā)送數(shù)據(jù)、應用程序向RTDX主機庫發(fā)送數(shù)據(jù)請求以及在目標機上提供數(shù)據(jù)緩存等功能。另外,數(shù)據(jù)發(fā)送前應先將數(shù)據(jù)拷貝到目標機緩存中,以減少對應用程序?qū)崟r性的影響。 RTDX主機庫中的COM接口可用來確定COM automation client與RTDX主機函數(shù)庫的通信方式。而通過COM automation client可訪問保存在RTDX lox文件或BTDX主機函數(shù)庫緩存中的數(shù)據(jù)。同時COM automation client也可通過RTDX主機函數(shù)庫向應用程序發(fā)送數(shù)據(jù)。
2.4 RTDX模式
RTDX主機函數(shù)庫提供了兩種接受目標機數(shù)據(jù)的模式:第一種是非連續(xù)模式,在這種模式中,數(shù)據(jù)通常存到主機的log文件中。該模式一般應用于非實時處理情況下,可在事后分析保存在log文件中的數(shù)據(jù)。第二種是連續(xù)模式,在這種模式中,數(shù)據(jù)不寫入log文件,而是由RTDX主機函數(shù)庫緩存,它一般應用在實時情況下。
3 基-ZRTDX的視頻數(shù)據(jù)傳輸
在程序調(diào)試時,筆者利用RTDX技術(shù)在主機上顯示采集圖像處理后的結(jié)果以驗證算法的性能,并通過設定主機與目標機的握手信號來在主機上實現(xiàn)動態(tài)的視頻顯示。
考慮到數(shù)據(jù)傳輸都由JTAG接口完成而且圖像數(shù)據(jù)量很大,調(diào)試中往往采用將512X512圖像每4個相鄰像素取一個點的方法來將分辨率降為128X128,因為減少數(shù)據(jù)量可提高顯示幀頻。當數(shù)據(jù)通過RTDX通道傳到主機時,128X128的圖像數(shù)據(jù)可通過每個像素擴展成4個相鄰的像素來恢復圖像。最后通過VC的位圖顯示函數(shù)來顯示圖像結(jié)果。圖2所示是其視頻數(shù)據(jù)流示意圖。
為了使主機與目標機之間能正確地傳送和接受數(shù)據(jù),主機應用程序和目標機應用程序都要嵌入支持RTDX的APl函數(shù)。下面詳細介紹兩者之間的操作流程。
3.1在DSP應用程序中使用RTDX
在DSP應用程序中通過APl函數(shù)調(diào)用RTDX目標機函數(shù)庫時,必須將相應的API函數(shù)嵌入應用程序中。其步驟如下:
(1)設定相應的RTDX通道為全局對象
RTDX通道為單向傳輸。設定RTDX輸出通道ochanData可使目標機向主機傳輸數(shù)據(jù);而設定RT-DX輸入通道ichanCmd則可使主機向目標機傳輸命令數(shù)據(jù),同時,可用輸入通道來同步主機與目標機。
其程序如下:
RTDX_CreatOutputChannel(ochanData);
RTDX_CreatlnputChannel(ichanCmd);
Void Task ch()
RTDX_enableOutput(&ochanData);
RTDX_enablelnput(&ichanCmd)
//START為主機向目標機發(fā)送
的傳輸開始控制命令(用戶自定義)
Retumcode二RTDX_read(&ichanCmd,
received,4);
)while(received[0]?。篠TART);
(2)設定RTDX_Poll()的調(diào)用方式
RTDX目標機函數(shù)庫是通過調(diào)用函數(shù)RTDXPon()來實現(xiàn)主機與目標機間的通信的。RTDX_Poll()的調(diào)用有兩種方式:一種是在應用程序中調(diào)用,另一種是利用中斷服務程序調(diào)用。程序如下
while(RTDX_writing!二NUIL)
#ifRTDX_POIIJNG
RTDX_Poll();
#endif )
若將宏RTDX_POII,ING_IMPLEMENTATION定義為1,則表示在應用程序中調(diào)用RTDX_Poll(),而如果將其定義為0,則表示在中斷服務程序中調(diào)用
RTDX_Poll()。
(3)目標機向主機發(fā)送視頻數(shù)據(jù)
若采集數(shù)據(jù)空間的一幀圖像(512X 512),可通過調(diào)用函數(shù)RTDX_write()發(fā)送到主機,并可將一幀圖像分成若干塊傳輸,每一塊數(shù)據(jù)為1k。程序如下:
fOr(cond:0;cond《0x10;cond++)
rawdat_temp‘baseadd+cond*0x4000;
rawdat二(unsignedint*)mwdat_temp;
/*圖像在目標機上的地址*/
fOr(count:0;count while(!RTDX-write(&ochan,mwdat+count*datanum,datanum*sizeof(int)));
3.2在VC編程環(huán)境下使用RTDX
在VC環(huán)境下獲取RTDX主機函數(shù)庫緩存中的數(shù)據(jù)并顯示的步驟如下:
(1)在VC中實現(xiàn)與RTDX主機函數(shù)庫的握手
(Handshanking)程序如下:
::Colnitialize(NULL); //initializeCOM
::Variantlnit(&sa); //initializeVARIANTsa
h二ndx.Createlnstance(uuidof(RTDXINTLib::Rtdx-
Exp)); //instantiate出eRTDX//COMObiect
訂(FAILED(血)){
MessageBox(//Error:Instantiationfailed?。?;
return-1; )
status二rtdx-》Open(“ochan’‘,”R“);
//opepachannel(ochan)fOrreading
訂(status!二Success){
MessageBox(”-Error
fdled!“);
return-1; 1
(2)在VC中重新獲得由目標機傳送來的數(shù)據(jù)
rtck-》ReadSAl4(&sa);
//read a 32-ht integermessage
switch(status) {
//teststatus returnedfrom ReadSAl4
case Success:
for(i:0;i《(signed)sa.parray-》
rgsabound[0].cElements;i++)
{hr二::SafeArrayGetElement(sa.parray,
&i,(10ng*)&data);
datatemp:(unsignedint)data;
fOr(intitochar:0;itochar《4;itochar十+)
ImageT[count+itochar];(char)(datatemp
》》itochar-k9)&隊000000ff);
count+:4;1//counter為傳輸像素計數(shù)器
break;
case Failure:
MessageBox(-Error:ReadSAl4
returnedfmlure?。躰”);
case
return-1;
EnoDataAvailsble:
MessageBox(“NODataiscurrendy
available!”);
return-1;
case EendOfl_ogFile:
MessageBox(“DataProcessingComplete!”)
1 while(status!二EEndOfLogFile)
(3)在VC中顯示數(shù)據(jù)的程序如下:
if(count二:16384) //128*128:
count二0;
br(inti:0;i for(intj:0¨ lpTemlmage¨*m_nWidth+¨:ImageT
[(m_nHei少t-i-1)*m_nWidth+¨
m_rawdat:RawToDib(hlmage);
Draw(m_rawdat,dc,1eft,top);
/*調(diào)用函數(shù)Draw()畫圖*
4 結(jié)束語
RTDX是一種非常優(yōu)秀的實時數(shù)據(jù)傳輸技術(shù),為軟件調(diào)試提供了一種全新的方法。該項技術(shù)所設計的調(diào)試軟件具有占用系統(tǒng)資源少、速度快和COM Automatic Client選擇靈活等特點,為DSP編程人員發(fā)現(xiàn)程序錯誤和監(jiān)測系統(tǒng)運行狀況提供了實時的、直觀的表示形式。其實,RTDX不但可以用在軟件調(diào)試過程中,而且可用于醫(yī)療監(jiān)測、工業(yè)控制等領域。
責任編輯:gt
-
dsp
+關(guān)注
關(guān)注
555文章
8123瀏覽量
354416 -
寄存器
+關(guān)注
關(guān)注
31文章
5402瀏覽量
122876 -
存儲器
+關(guān)注
關(guān)注
38文章
7615瀏覽量
166004
發(fā)布評論請先 登錄
關(guān)于MATLAB建立圖像處理和目標識別系統(tǒng)流程的求助
如何選擇合適頻率的射頻識別系統(tǒng)
怎么實現(xiàn)基于Z85C30的動目標識別系統(tǒng)的串行通信設計?
基于DSP的毫米波主被動復合探測器目標識別系統(tǒng)設計【回映分享】
智能車目標識別系統(tǒng)的設計實現(xiàn)資料推薦
基于RT-Thread和N32G457的嵌入式目標識別系統(tǒng)設計實現(xiàn)
基于USB和目標識別的圖像采集系統(tǒng)的設計實現(xiàn)
運動目標識別與跟蹤系統(tǒng)的研究
基于圖像檢索的地標識別系統(tǒng)
《光學精密工程》—采用優(yōu)化卷積神經(jīng)網(wǎng)絡的紅外目標識別系統(tǒng)

機器視覺的圖像目標識別方法綜述

評論