1. 程式人生 > >CCS初學除錯以及RTDX

CCS初學除錯以及RTDX

1.DSP/BIOS應用程式除錯(2009.10.20)

在CCS2.0 的emulator寫dsp/bios 的程式,編譯連結無錯誤,而點選LOAD Program下載xxx.out完成時彈出如下對話方塊:

RTDX target application does not match emulation protocol!

Loaded program was created with an rtdx library which does not match the target device

這將導致RTDX(實時資料交換)不能使用

分析:

RTXD可以在DSP/BIOS中使用,也可以脫離DSP/BIOS使用;目前CCS Simulator不支援RTDX,故RTDX必須在Emulator下使用,即還需要硬體模擬器和DSP目標板。

故這是由於下載BIOS/DSP程式時RTDX設定錯誤導致的;

問題解決如下:

把DSP/BIOS配置視窗中的input/output-->RTDX -real-Time Exchange settings的RTDX mode 改為JTAG(原來是simulator),重新編譯後LOAD,上述警告消除,可以在模擬的情況下進行BIOS除錯了。

PS:雖然simulator能編譯執行DSP/BIOS程式,並能提供實時查詢程式執行情況(主要是CPU負荷,時序,日誌以及執行緒等)。但實際開發DSP/BIOS應用程式時為了真實的瞭解目標板的各種資訊,僅有Simulator(軟體模擬器)是不行的,還需要使用Emulator(硬體模擬器)和DSP/BIOS外掛(安裝時已裝入)。

 

 

2.RTDX應用程式除錯(10.22)

RTDX測試DSP Target傳輸資料到PC機:

a)建立工程,編輯原始碼(.c/。asm),加入標頭檔案(.h),庫檔案(.lib)以及連結命令檔案(.cmd)

b)新增修改具有實時資料傳輸的RTDX語句

包括:#include <rtdx.h>;  RTDX標頭檔案(rtdx.h)

      RTDX_CreateOutputChannel( ochan );   定義一個全域性的PC機資料輸出通道,通道名可以任取

      TARGET——INITIALIZE();    初始化DSP目標系統;

      RTDX_enableOutput( &ochan );  使能輸出通道寫資料;

      status=RTDX_write( &ochan,&data,sizeof(data) );  傳送資料至PC;

      RTDX_disableOutput( &ochan );  禁止輸出通道傳輸資料。

c)進行資料處理,測試應用程式

編譯連結完成後載入.out檔案。在TOOLS-RTDX-Configration中設定RTDX使能,執行debug-run。

出現問題:下載可執行檔案時提示

Data verification failed at address 0x(某地址)Please verify target memory and memory map.”

按跳過提示下載完成後messages欄提示:

Can't Set Breakpoint: Error 0x00000008/-1076 Error during: Break Point,  Cannot set/verify breakpoint at 0x80007958
Breakpoint Manager: An error was encountered attempting to set a breakpoint used
 for end of program detection.
Can't Set Breakpoint: Error 0x00000008/-1076 Error during: Break Point,  Cannot set/verify breakpoint at 0x800081B4

分析:根據CMD檔案確認你的地址分配是否在DSP可分配的RAM中;如果給程式分配的地址不在片內的RAM段肯定是會出錯的。可能CMD地址空間實際上不屬於RAM對映地址範疇,導致不能正常讀寫。
另外如果DSP片內有程式正在執行,在下載新程式的時候也會出錯。出現這種情況,可以在DSP啟動前與CCS進行連線。

解決:更改cmd檔案中的地址分配使之與OPTION中的Memory Map對映地址空間一致。

 

3.DSP硬體模擬環境問題彙總

a)無論是在硬體模擬環境還是軟體模擬環境中都無法建立DSP專案,可能是安裝時在以前安裝過CCS的軟體,導致衝突;連結檔案.dll未註冊,或者與系統檔案不相容,解決方法:建議備份檔案後重裝C盤

 

b)開啟STEP後,無法初始化硬體模擬器

 

可能的原因是

 

 

 

CCS STEP中的硬體配置USB驅動安裝或者I/O口出現錯誤(如1模擬器連線是否正常? 2模擬器的I/O設定是否正確? 3XDS模擬器的電源及模擬頭是否正確? 4目標系統型號是否正確? 5模擬器是否正常?);

USB驅動程式未安裝(從“我的電腦-管理”中可以查到是否安裝成功驅動)

c)關於gel檔案,memory map一致性問題

memory map的作用

1. 記憶體對映以頁面為單位,將檔案內容對映到記憶體中。
    2. 使用記憶體對映可以建立記憶體對映檔案。記憶體對映檔案的優點是我們不需要呼叫 read 、write 之類的I/O函式,只需用從記憶體對映區取、存資料,實際的 I/O 操作是由核心執行的,可以簡化程式碼。

3. 使用記憶體對映可以實現程序間共享記憶體。

選擇有效的儲存器空間對映關係

設計原則:CCS下的儲存器空間設定應該與目標板的硬體實際配置一致,沒有的儲存器不要有效。這樣便於除錯,CCS會發現你調入程式時或程式執行時,是否訪問了無效地址。

配置儲存器空間對映的方法:

 1)在GEL檔案中設定;

 2)在Option選單下,選擇Memory Map選項,根據你的硬體設定。注意一定要將Enable Memory Mapping置為使能。

常出現的相關情形:

 

 

 

 

出現以上情況均是由於記憶體單元設定不一致導致的。前圖是由於點選option-memory map-Enable Memory Mapping項,CCS雖然使能了“Enable Memory Mapping”選項,但是初始化配置錯誤或者未作更改;後者通常是由於gel檔案中設定分配的記憶體空間與儲存器無法形成一一對映導致無法實際訪問虛擬空間。

解決方法:更改gel檔案重新合理分配記憶體單元。

OUT檔案載入時提示“Data verification failed...” 
Link的CMD檔案分配的地址同GEL或設定的有效地址空間不符。中斷向量定位處或其它程式碼、資料段定位處,沒有RAM,無法載入OUT檔案。

解決方法: 1)調整Link的CMD檔案,使得定位段處有RAM。 

2)調整儲存器設定,使得RAM區有效。

引申:

補充概念:

cmd檔案

用於DSP程式碼的定位。由於DSP的編譯器的編譯結果是未定位的,DSP沒有作業系統來定位執行程式碼,每個客戶設計的DSP系統的配置也不盡相同,因此需要使用者自己定義程式碼的安裝位置。

cmd檔案由3部分組成: 
1)輸入/輸出定義:.obj檔案:連結器要連結的目標檔案;.lib檔案:連結器要連結的庫檔案;.map檔案:連結器生成的交叉索引檔案;.out檔案:連結器生成的可執行程式碼;連結器選項 
2)MEMORY命令:描述系統實際的硬體資源 
3)SECTIONS命令:描述“段”如何定位 

什麼是CSL?
1,用於配置、控制和管理DSP片上外設 
2,已為C6000和C5000系列DSP設計了各自的CSL庫 
3,CSL庫函式大多數是用C語言編寫的,並已對程式碼的大小和速度進行了優化 
4,CSL庫是可裁剪的:即只有被使用的CSL模組才會包含進應用程式中 
5,CSL庫是可擴充套件的:每個片上外設的API相互獨立,增加新的API,對其他片上外設沒有影響 

為什麼要設計CSL?
1,DSP片上外設種類及其應用日趨複雜 
2,提供一組標準的方法用於訪問和控制片上外設 
3,免除使用者編寫配置和控制片上外設所必需的定義和程式碼 

CSL的特點
1,片上外設程式設計的標準協議:定義一組標準的APIs:函式、資料型別、巨集; 
2,對硬體進行抽象,提取符號化的片上外設描述:定義一組巨集,用於訪問和建立暫存器及其域值 
3,基本的資源管理:對多資源的片上外設進行管理; 
4,已整合到DSP/BIOS中:通過圖形使用者介面GUI對CSL進行配置; 
5,使片上外設容易使用:縮短開發時間,增加可移植. 

boot loader

DSP的速度儘快,EPROM或flash的速度較慢,而DSP片內的RAM很快,片外的RAM也較快。為了使DSP充分發揮它的能力,必須將程式程式碼放在RAM中執行。為了方便的將程式碼從ROM中搬到RAM中,在不帶flash的DSP中,TI在出廠時固化了一段程式,在上電後完成從ROM或外設將程式碼搬到使用者指定的RAM中。此段程式稱為“boot loader”。 

初始化

DSP在RESET後,許多的暫存器的初值一般同用戶的要求不一致,例如:等待暫存器,SP,中斷定位暫存器等,需要通過初始化程式設定為使用者要求的數值。 初始化程式的主要作用: 1)設定暫存器初值。 2)建立中斷向量表。 3)外圍部件初始化。