⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 92.htm

📁 dsp书籍,对还没入门的人来说很不错,没有解压密码
💻 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 + -