轻松学会DSP——TMSCx软件开发实用教案_第1页
轻松学会DSP——TMSCx软件开发实用教案_第2页
轻松学会DSP——TMSCx软件开发实用教案_第3页
轻松学会DSP——TMSCx软件开发实用教案_第4页
轻松学会DSP——TMSCx软件开发实用教案_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TMS320C54x DSP软件开发流程(lichng)一、 DSP软件开发流程(lichng)第1页/共58页第一页,共58页。一、一、 DSP DSP软件开发流程软件开发流程(lichng)(lichng)1 1建立源程序建立源程序2 2C C编译器(编译器(C CompilerC Compiler)3 3汇编器(汇编器(AssemblerAssembler)4 4连接器(连接器(LinkerLinker)5 5调试调试(dio sh)(dio sh)工具工具6 6十六进制转换公用程序(十六进制转换公用程序(Hex Conversion UtilityHex Conversion Util

2、ity) 第2页/共58页第二页,共58页。 我们调试一个我们调试一个(y )程序,首先要编辑一个程序,首先要编辑一个(y )源文件,这个源文件可以源文件,这个源文件可以是汇编语言是汇编语言,其后缀名为其后缀名为.asm ,也可以是,也可以是C语言语言,其后缀名为其后缀名为.C 。 汇编语言的指令汇编语言的指令集有两种,助记符指令集(集有两种,助记符指令集(Mnemonic Instruction Set)代数指令集)代数指令集(Algebraic Instruction Set)。)。 C语言则符合标准语言则符合标准C、C+格式。格式。 编辑好汇编语言源文件后,我们需要对这个文件进行编辑好汇

3、编语言源文件后,我们需要对这个文件进行“汇编汇编”,从而生成一个,从而生成一个(y ).obj后缀的中间文件。后缀的中间文件。第3页/共58页第三页,共58页。 之后,通过一个之后,通过一个“链接链接”动作,把动作,把.obj文件生成文件生成(shn chn)一个一个DSP可可以执行的文件,后缀为以执行的文件,后缀为.out。链接的作用是分配执行文件代码在。链接的作用是分配执行文件代码在DSP内部程序空间内部程序空间的和数据空间的位置。这些分配,通过一个后缀为的和数据空间的位置。这些分配,通过一个后缀为.cmd的文件告诉链接命令。的文件告诉链接命令。 最后,将调试成功的最后,将调试成功的.ou

4、t代码通过十六进制转换程序转化为可固化在可擦写存代码通过十六进制转换程序转化为可固化在可擦写存储器中,实现储器中,实现DSP自动脱机运行。自动脱机运行。 第4页/共58页第四页,共58页。二、编译工具二、编译工具(gngj)(gngj)及其使用及其使用TMS320C54xV3.50版代码生成工具(gngj)程序第5页/共58页第五页,共58页。(一)、编译(一)、编译(biny)(biny)工具工具 C编译器 汇编器 归档(gudng)器 连接器第6页/共58页第六页,共58页。 asm500 input file object file listing file -optionsinput

5、file: 汇编源文件名,缺省后缀汇编源文件名,缺省后缀(huzhu)为为.asm;object file: 编译输出的编译输出的OBJ文件名文件名,缺省后缀缺省后缀(huzhu)为为.obj;listing file: 产生的列表文件名产生的列表文件名,缺省后缀缺省后缀(huzhu)为为.lst;options: 编译器使用的各种选择。编译器使用的各种选择。1 1 、汇编器、汇编器第7页/共58页第七页,共58页。 -c:若使用该选项,编译器忽略字母的大小写。例如:若使用该选项,编译器忽略字母的大小写。例如(lr)abc与与ABC是一样的。是一样的。系统缺省为区分大小写。系统缺省为区分大小写

6、。 -i:设置搜索路径。通知编译器在指定的搜索路径中去查找:设置搜索路径。通知编译器在指定的搜索路径中去查找.copy,.include中的文中的文件。用法举例:件。用法举例:-ic:c54x。 -l: (小写的小写的L)在编译时产生列表文件,缺省后缀为)在编译时产生列表文件,缺省后缀为.lst第8页/共58页第八页,共58页。 -mg: 汇编源程序使用代数指令集汇编源程序使用代数指令集 或在源代码中使用或在源代码中使用 -s:将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符:将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符号表号表 -v: 指定指定(zhd

7、ng)版本。特别是需要使用版本。特别是需要使用BOOTLOADER时,应加时,应加-v548开关开关 编译指令执行和参数设置,也可在编译指令执行和参数设置,也可在CCS中进行。中进行。第9页/共58页第九页,共58页。2 2 、归档、归档(gu(gudng)dng)器器Ar500 -commandoptionlibnamefilenameCommand: 指示(zhsh)归档器行为 a:加入某文件到库文件中 d:从库文件中删除文件 r:替换库文件中某变量 x:抽取库文件中某变量第10页/共58页第十页,共58页。归档归档(gudng)器器 Option:归档(gudng)器工作 -q :不显示

8、状态栏及相关信息; -s :打印全局变量; Libname: 库文件名 Filename:目标文件 Ar500 -a function sine.obj cos.obj flt.obj第11页/共58页第十一页,共58页。3 3 、连接器、连接器lnk500 -options filename 1 . . filename n-e global_symbol:定义程序的进入点;-c:使用C编译器的ROM初始化模式;-cr:使用C编译器的RAM初始化模式;-i dir:指定库文件的路径;-l filename:指定连接时使用的库文件名;-m filename:生成(shn chn)map文件;-

9、o filename:指定生成(shn chn)的out文件名。系统缺省为a.out.第12页/共58页第十二页,共58页。连接器连接器 文件也可以在命令文件中设置,通常使用系统默认值,即不需设置文件也可以在命令文件中设置,通常使用系统默认值,即不需设置; 选项可以在命令文件中设置,效果一样选项可以在命令文件中设置,效果一样; 具体执行也是在具体执行也是在CCS中中; LNK500生成的生成的OUT文件不是纯二进制代码文件,而是包含代码、符号表、代码定位文件不是纯二进制代码文件,而是包含代码、符号表、代码定位信息的复合文件信息的复合文件 通过查看通过查看MAP文件可以获得变量、子程序等符号的具

10、体地址文件可以获得变量、子程序等符号的具体地址(dzh)。注意:。注意:MAP文文件只列出全局变量的地址件只列出全局变量的地址(dzh)。(用。(用.global说明的符号)说明的符号)第13页/共58页第十三页,共58页。 段的概念 汇编器对段的处理(chl) 链接器对段的处理(chl) .(二)、公共(二)、公共(gnggng)目标文件格式目标文件格式第14页/共58页第十四页,共58页。1 COFF1 COFF文件的基本文件的基本(jbn)(jbn)单元单元段段 段(sections)是COFF文件中最重要的概念。一个段就是( jish)最终在存储器映象中占据连续空间的一个数据或代码块。

11、目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段。 段可以分为两大类,即已初始化段和未初始化段。如图1 所示为目标文件中的段与目标系统中存储器的关系。第15页/共58页第十五页,共58页。图3 目标文件(wnjin)中的段与目标存储器的关系第16页/共58页第十六页,共58页。2 汇编器对段的处理汇编器对段的处理(chl)2.1 未初始化段未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序(chngx)可以在运行时利用这些空间建立和存储变量。未初始化段是通过使用.b

12、ss和.usect汇编伪指令建立的,两条伪指令的句法分别为:.bss符号,字数 符号.usect“段名”,字数第17页/共58页第十七页,共58页。汇编器对段的处理汇编器对段的处理(chl)2.2已初始化段已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件(wnjin)中,加载程序时再放到TMS320C54X存储器中。三个用于建立初始化段的伪指令句法分别为: .text段起点 .data段起点 .sect“段名”,段起点第18页/共58页第十八页,共58页。汇编器对段的处理汇编器对段的处理(chl)2.3命名段命 名 段 就 是 程 序 员 自 己 定 义 的 段 , 它 与

13、缺 省 的 . t e x t 、 . d a t a 和 . b s s 段 一 样 使 用(shyng),但与缺省段分开汇编。 data段不同的存储器中,将未初始化的变量汇编到与bss段不同的存储器中。产生命名段的伪指令为: 符号.usect“段名”,字数 .sect“段名”,段起点第19页/共58页第十九页,共58页。汇编器对段的处理汇编器对段的处理(chl)2. 4子段子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名子段也有两种,用.sect命令(mng lng)建立的是已初始化段,用.us

14、ect命令(mng lng)建立的是未初始化段。第20页/共58页第二十页,共58页。汇编器对段的处理汇编器对段的处理(chl)2. 5段程序计数器(SPC)汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应(xingyng)的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应(xingyng)的段,且相应(xingyng)的SPC在先前的基础上继续增加。第21页/共58页第二十一页,共58页。图2 产生(chnshng)的目标代码第22页/共58页

15、第二十二页,共58页。3 链接链接(lin ji)器对段的处理器对段的处理 链接器对段的处理有两个(lin )功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次,链接器为输出段选择存储器地址。第23页/共58页第二十三页,共58页。链接链接(lin ji)器对段的处理器对段的处理 链接器有两个命令(mng lng)完成上述功能,即: MEMORY 命令(mng lng)定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。 SECTIONS命

16、令(mng lng)告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令(mng lng)指定子段。 第24页/共58页第二十四页,共58页。图3 链接(lin ji)器默认的存储器分配第25页/共58页第二十五页,共58页。4 重新重新(chngxn)定位定位4.1链接(lin ji)时重新定位将各个段定位到存储器中,每个段都从合适的地址开始。将符号值调整到相对于新的段地址的数值。调整对重新定位后符号的引用。第26页/共58页第二十六页,共58页。重新重新(chngxn)定位定位4.2运行时重新定位将代码装入存储器的一个地

17、方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的ROM中,但希望在较快的RAM中运行。链接器提供了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置(shzh)装入地址,再用运行关键字设置(shzh)运行地址。第27页/共58页第二十七页,共58页。5 程序程序(chngx)装入装入(1)硬件仿真器和CCS集成开发环境,具有内部的装入器,调用(dioyng)装入器的LOAD命令即可装入可执行程序。( 2 ) 将 代 码 固 化 在 片 外 存 储 器 中 , 采 用 H e x 转 换 工

18、具 ( H e x c o n v e r s i o n utility),例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash。 第28页/共58页第二十八页,共58页。6 COFF文件文件(wnjin)中的符号中的符号 COFF文件中有一个符号表,用于存储程序中的符号信息。链接器对符号重定位时使用该表,调试工具也使用该表来提供符号调试。 外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的

19、 模 块 中 使 用 的 符 号 ; . r e f 在 当 前 模 块 中 引 用 , 但 在 别 的 模 块 中 定 义 的 符号;.global可用于以上任何(rnh)一种情况。第29页/共58页第二十九页,共58页。三三 汇编汇编(hubin)伪指令伪指令汇编语言文件的内容汇编语言文件的内容 汇编语言指令;汇编语言指令; 汇编指令(伪指令);汇编指令(伪指令); 注释注释(zhsh)语句;语句;第30页/共58页第三十页,共58页。表5-2 常用(chn yn)的汇编伪指令第31页/共58页第三十一页,共58页。汇编汇编(hubin)伪指令伪指令1段定义伪指令为便于链接器将程序、数据分

20、段定位于(wiy)指定的(物理存在的)存储器空间,并将不同的obj文件链接起来。段的使用非常灵活,但常用以下约定:.text 此段存放程序代码。.data 此段存放初始化了的数据。.bss 此段存入未初始化的变量。.sect 名称 定义一个有名段,放初始化了的数据或程序代码。第32页/共58页第三十二页,共58页。汇编汇编(hubin)伪指令伪指令2条件汇编(hubin)伪指令.if、.elseif、.else、.endif伪指令告诉汇编(hubin)器按照表达式的计算结果对代码块进行条件汇编(hubin)。.if expression 标志条件块的开始,仅当条件为真(expression的值

21、非0即为真)时汇编(hubin)代码。.elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编(hubin)代码块。.else 标志若.if条件为假时要汇编(hubin)代码块。.endif 标志条件块的结束,并终止该条件代码块。第33页/共58页第三十三页,共58页。汇编汇编(hubin)伪指令伪指令3引用(ynyng)其他文件.include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。.copy 文件名 与.include类似。.def 符号名 在当前文件中定义一个符号,可以被其他文件使用。.ref 符号名 在其他文件中定义,

22、可以在本文件中使用的符号。.global 符号名 其作用相当于.def、.ref效果之和。第34页/共58页第三十四页,共58页。汇编汇编(hubin)伪指令伪指令4 初始化常数伪指令对于初始化段,可以使用下列伪指令定义初始化数据 .long .word/.int .byte .string 例子(l zi)同前页 对于未初始化段,可以使用下列伪指令来保留空间 .space 例如: lable: .space 19 表示当前段中保留19bit空间,首地址为lable。 也可以如前面例子(l zi)中 .bss sym, 19 ; Reserve space in .bss 第35页/共58页第

23、三十五页,共58页。5、段程序计数器(SPC)定位指令SPC用于记录每个段的当前的指针位置,便于编译器分配各个段.align其后只能是2027间的2的幂值,其后不带参数,默认(mrn)为128,即对准页边界,为1表示对准字边界,为2表示对准偶数边界,为N表示对准页内的第N个字边界通常作用是使SPC对准字边界,偶地址边界或者页边界汇编(hubin)伪指令第36页/共58页第三十六页,共58页。第37页/共58页第三十七页,共58页。汇编汇编(hubin)伪指令伪指令6 其它指令.mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。.title 为

24、汇编器提供(tgng)一个打印在每一页顶部的标题.set 把一个常数等效为一个符号.end 程序块结束。第38页/共58页第三十八页,共58页。汇编汇编(hubin)伪指令伪指令4宏定义和宏调用TMS320C54x汇编(hubin)支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。宏定义如下: Macname .macroparameter 1,parameter n .mexit .endm 第39页/共58页第三十九页,共58页。四四 链接链接(lin ji)器命令文件的编写与使用器命令文件的编写与使用 文件(wn

25、jin)参数 MEMORY伪指令 SECTIONS伪指令第40页/共58页第四十页,共58页。文件参数 -m: 生成map文件 -stack:保留存储区为未初始化变量(binling) -o: 输出文件链接器命令(mng lng)文件第41页/共58页第四十一页,共58页。链接链接(lin ji)器命令文件器命令文件 MEMORY伪指令就是用来指定目标存储器的模型。MEMORY伪指令的一般(ybn)语法为:第42页/共58页第四十二页,共58页。链接器命令链接器命令(mng lng)文件文件第43页/共58页第四十三页,共58页。链接器命令链接器命令(mng lng)文件文件第44页/共58页

26、第四十四页,共58页。第45页/共58页第四十五页,共58页。段指令语法:段指令语法: SECTIONS伪指令功能如下:伪指令功能如下: 说明如何将输入说明如何将输入(shr)段组合成输出段。段组合成输出段。在可执行程序中定义输出段。在可执行程序中定义输出段。指定输出段在存储器中存放的位置。指定输出段在存储器中存放的位置。允许对输出段重新命名允许对输出段重新命名链接(lin ji)器命令文件第46页/共58页第四十六页,共58页。链接链接(lin ji)器命令文件器命令文件第47页/共58页第四十七页,共58页。第48页/共58页第四十八页,共58页。链接器命令链接器命令(mng lng)文件

27、文件例子(l zi) :File1.obj -o file1.out-m file1.mapMEMORYPAGE 0: PRO1 :origin=2000h,length=1000h PRO2:origin=3000h,length=500hPAGE 1: DAT:origin=80h,length=1000h SECTIONS .text: load = PRO1, run = PRO2 PAGE0 .vect: PRO2 PAGE0 .data align(128): DAT PAGE1 .bss: DAT PAGE1第49页/共58页第四十九页,共58页。图 段的定位(dngwi)第50页/共58页第五十页,共58页。链接链接(lin ji)器命令文件器命令文件系统系统(xtng)默认状态默认状态图 链接器默认(mrn)的存储器分配 缺省情况下,连接器从地址080h依次放入。第51页/共58页第五十一页,共58页。五五 汇编语言程序汇编语言程序(chngx)编写方法编写方法 汇编语言源程序格式(g shi) 汇编语言中的常数和字符串第52页/共58页第五十二页,共58页。(一)(一) 汇编语言汇编语言(hu bin y yn)源程序格式源程序格式 助记符指令一般包含4个部分,其一般组成形式为: 标号: 助

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论