?? 92.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精華下載</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://202.112.58.200"><font face="黑體"><big><big>Tsinghua</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑體"><p align="center"> DSP開發技術 (BM: chaosboy wbs) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑體"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="DSP開發技術.htm">回到開始</a>][<a href="6.htm">上一層</a>][<a href="93.htm">下一篇</a>]
<hr><p align="left"><small>發信人: chaosboy (大夢方醒), 信區: DSPTech <br>
標 題: TMS320C54X C編譯器的使用(轉載) <br>
發信站: BBS 水木清華站 (Mon Jun 3 12:33:18 2002) <br>
<br>
<br>
TMS320C54x C編譯器的使用 <br>
---------------------------------------------------------------------------- <br>
---- <br>
---------------------------------------------------------------------------- <br>
---- <br>
武漢力源電子股份有限公司開發部(430010) 劉朝暉 <br>
摘 要 介紹了TI公司提供的TMS320C54x C編譯器的使用特點,討論了關于移植、與 <br>
匯編的接口等問題。 <br>
關鍵詞 TMS320C54x C編譯器 移植 嵌入匯編 <br>
1 前言 <br>
TMS320C54x 是TI公司針對通信應用推出的中高檔16位定點DSP系列器件。該系列器 <br>
件功能強大、靈活,較之TMS320C2xx ,具有以下突出優點: <br>
(1)速度更快:40~100MIPS; <br>
(2)指令集更為豐富; <br>
(3)更多的尋址方式選擇; (4)兩個40位的累加器; <br>
(5)硬件堆棧指針; <br>
(6)支持塊重復和環型緩沖區管理。 <br>
TMS320C54x 的應用一般較為復雜,因此,完全采用匯編語言進行編程將是一件很困 <br>
難、也很低效的事情。而C語言以其靈活性、易移植性,已成為單片機開發的一種趨勢, <br>
對于更為復雜的DSP應用來說,更是如此。 <br>
TI公司為TMS320C54x提供了功能強大的C編譯器,支持優化功能。下面就對使用TMS <br>
320C54x C編譯器中的一些體會介紹給讀者。作者在實踐中使用的TMS320C54x C編譯器的 <br>
版本為1.10版,以下的討論都基于該版本。 <br>
2 C語言的移植 <br>
在進行復雜算法開發時,一般的做法是先在PC上用高級語言(如C語言)進行仿真, <br>
然后再移植到DSP平臺中??紤]到效率問題,可進一步進行手工匯編的調整。編譯器的工 <br>
作方式大致可分為兩類:一類直接由高級語言產生目標代碼;另一類則是先生成中間的 <br>
匯編代碼,再匯編成目標代碼。TI公司提供的C編譯器屬于后者。這樣,用戶可方便地根 <br>
據中間的匯編代碼進行手工調整和改寫。 <br>
在進行C語言移植時,涉及到兩個問題:一是庫函數的使用,二是字長問題。TI的T <br>
MS320C54x C編譯器提供符合ANSI C的函數庫。至于字長,要取決于硬件機器字長和操作 <br>
系統,但一般來說,在不同的系統中,short型為16位,long型為32位,而int型卻有所 <br>
不同。如,在VC環境中,int型為32位,而對于TMS320C54x C編譯器來說,int型則為16 <br>
位。因此,在將C源程序由仿真環境向TMS320C54x平臺移植時,應根據各變量的取值范圍 <br>
,盡可能地將int型歸類為short型或long型。 <br>
3 段的分配 <br>
雖然,C語言是一種相對高效的高級語言,并且TI提供的C編譯器還結合硬件特點支 <br>
持三級優化功能,但生成的匯編代碼效率仍可能會不盡人意。如作者預使用環型緩沖區 <br>
管理功能,這就要求該緩沖區應被定位到相對特定的位置。因此,用戶對C編譯器究竟是 <br>
如何進行存儲分配的,應有一定的了解。 <br>
目標碼是以段為單位組織的。至于TMS320C54x 匯編器是如何具體分配段,而連接器 <br>
又是如何進行連接的,這些并非本文的要旨,詳細內容請參見關于TMS320C54x 匯編/連 <br>
接器的使用一書。這里,僅結合C語言的特點,簡單介紹一下幾種常用段的使用。 <br>
總的來說,可將所有的段分為兩類:已初始化段和未初始化段。 <br>
已初始化段中包含數據表和可執行代碼,常用的有3個:.text 段、.cinit段和.co <br>
nst段。其中,.text 段中包含所有可執行的代碼以及常量;.cinit段中包含未用const <br>
聲明的外部(external)或靜態(static)數據表;.const段中則包含已用const聲明的 <br>
外部或靜態數據表以及字符串常量。 <br>
未初始化段在存儲器(通常為RAM)中保留空間,用于程序運行時創建和存儲變量, <br>
常用的有兩個:.bss段和.stack段。其中,.bss段用于為全局和靜態變量保留空間,在 <br>
程序開始執行時,由C引導程序將.cinit段中的已初始化數據復制到.bss段中。.stack段 <br>
用作C的系統堆棧,向被調函數傳遞參數,并為局部變量分配空間。 <br>
在上述五個常用段中,.text 段和.cinit段被固定連接至程序空間,存儲器類型可 <br>
以是ROM或RAM(一般為ROM,具體取決于編譯時RAM或ROM方式的選擇);.bss段和.stac <br>
k段則被固定連接至數據空間,存儲器類型只能是RAM。 <br>
而.const段的使用則較為靈活。.const段被固定連接至數據空間,但存儲器類型可 <br>
以是ROM或RAM。這就有別于.cinit段:.cinit段被連接至程序空間,程序執行時,再被 <br>
復制到數據空間中的.bss段中。這樣,一張未用const聲明的數據表要同時占用程序(. <br>
cinit段)和數據空間(.bss段)的一部分。與之相比較,如果系統支持數據ROM,則該 <br>
數據表改用const聲明后,只需占用數據空間(.const段)的一部分。 <br>
如果程序較為復雜,由C編譯器生成的.bss段會比較龐大,這種情況下對.bss段進行 <br>
特定操作就比較困難。如將幾個常用的數據表連接至片內RAM,而非片外RAM;或需對某 <br>
個數據表進行特殊尋址。這時,即使目標系統不支持數據ROM,也有必要使用.const段。 <br>
這就需要在連接時對.const段作如下規定:在程序空間中加載,而在數據空間中運行。 <br>
C引導程序對其處理的方法類似與.cinit段,將其從程序空間復制到數據空間。具體實現 <br>
,請參見TMS320C54x C編譯器的用戶指南。但作者在使用1.10版的TMS320C54x C編譯器 <br>
時發現,該版本的引導程序并不支持.const段的加載。通過閱讀C編譯器所帶的庫函數的 <br>
源代碼,參照引導程序對.cinit段的處理,作者修改了該段引導程序,使之支持對.con <br>
st段的加載。 <br>
除上述五個常見段外,TMS320C54x C編譯器還可能產生兩個段:.switch段和.sysm <br>
em段。其中,.switch段包含用于開關(switch)語句的數據表;而.sysmem段則用于動 <br>
態存儲分配。如果直接使用了匯編,還可能用到.data段以及自命名的已初始化(代碼) <br>
段和未初始化(變量)段。 <br>
4 C與匯編語言的混用 <br>
在C語言中使用匯編語言,可采取兩種方式:一是調用匯編語言子程序;二是使用嵌 <br>
入匯編。 <br>
4.1 調用匯編語言子程序 <br>
在TMS320C54x C程序中調用匯編語言子程序,必須遵循其函數調用規則和寄存器使 <br>
用規則。 <br>
TMS320C54x C編譯器在處理函數調用時,關于如何傳遞入口參數以及如何返回出口 <br>
參數制定了一套嚴格的規則。詳細內容請參見文獻[2]。 <br>
TMS320C54x 共有8個通用寄存器(AR0~AR7),其中AR1、AR6和AR7可能會被編譯器 <br>
所使用,其中AR1一般用作局部變量暫存,而AR7常被用作全局變量。所以,如果所調用 <br>
的匯編語言子程序中使用了這3個寄存器,應作上下文保護。 <br>
TMS320C54x C編譯器支持寄存器變量的使用,最多兩個,分別為:AR1和AR6。通常 <br>
的用法是創建全局寄存器變量。較之一般存儲單元,C54x 對寄存器的存取速度最快。因 <br>
此,對一些使用頻率很高的變量來說,將其聲明為寄存器變量,可顯著提高處理速度。 <br>
<br>
如果使用了全局寄存器變量,應采用-r選項對所有代碼(包括庫函數)進行重新編 <br>
譯,以禁止C編譯器對AR1或AR6的使用。 <br>
4.2 嵌入匯編 <br>
雖然TMS320C54x C編譯器提供了三級優化功能,但作者實際使用的體會仍不夠滿意 <br>
。而在C中調用匯編語言子程序,又要求嚴格遵循其參數傳遞規則。由于TMS320C54x C編 <br>
譯器支持在C源代碼中直接用asm語句嵌入匯編,故在C編譯器所產生的中間匯編代碼的基 <br>
礎上,可局部使用嵌入匯編。這樣,一方面可大大提高一些頻繁使用的代碼段的效率, <br>
另一方面,又不用改變原來的函數框架,也便于對照仿真結果進行調試。 <br>
在進行嵌入匯編時,要特別注意流水線的沖突。TMS320C54x 采用6級流水線結構, <br>
在出現流水線沖突的地方,可插入空操作(nop)指令來解決。常見的易產生流水線沖突 <br>
的指令如STLM、ADDM等。 <br>
關于1.10版,還有一個值得注意的問題,即如何由兩個短整數獲得32位的長整數乘 <br>
積。 <br>
如: <br>
short m1,m2; <br>
long result; <br>
result = (long) (m1 * m2); (1) <br>
result = ((long) m1 * (long) m2); (2) <br>
對于(1),1.10版的編譯器只是將乘積的低16位存入result;而對于(2),得到的是 <br>
一個32位的長整數乘積,但卻是調用了兩個長整數相乘的庫函數(L$$MPY)而得到的, <br>
這對于含有大量乘加運算的DSP應用來說,效率上難以令人接受。為此,采用嵌入匯編可 <br>
方便地解決這個問題。 <br>
5 結語 <br>
上述討論中的1.10版的TMS320C54x C編譯器是一個DOS下的工具,相應的仿真調試環 <br>
境也不夠友好。目前,TI公司針對TMS320C54x 系列已經推出了一個功能強大的集成開發 <br>
環境。 <br>
參 考 文 獻 <br>
1 TMS320C54x Optimizing C Compilier User’s Guide. Texas Instruments Inc., 1 <br>
997 <br>
2 TMS320C54x Assembly Language Tools User’s Guide. Texas Instruments Inc., <br>
1997 <br>
3 TMS320C54x DSP CPU and Peripherals. Texas Instruments Inc., 1996 <br>
4 TMS320C54x DSP Mnomonic Instruction Set. Texas Instruments Inc., 1996 <br>
<br>
-- <br>
<br>
※ 來源:·BBS 水木清華站 smth.edu.cn·[FROM: 166.111.151.169] <br>
</small><hr>
<p align="center">[<a href="DSP開發技術.htm">回到開始</a>][<a href="6.htm">上一層</a>][<a href="93.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">歡迎訪問Cterm主頁</a></p>
</table>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -