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

下载本文档

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

文档简介

1、TMS320C54x DSP软件开发流程一、 DSP软件开发流程第1页/共58页一、一、 DSPDSP软件开发流程软件开发流程1 1建立源程序建立源程序2 2C C编译器(编译器(C CompilerC Compiler)3 3汇编器(汇编器(AssemblerAssembler)4 4连接器(连接器(LinkerLinker)5 5调试工具调试工具6 6十六进制转换公用程序(十六进制转换公用程序(Hex Conversion UtilityHex Conversion Utility) 第2页/共58页 我们调试一个程序,首先要编辑一个源文件,这个源文件可以是汇编语言我们调试一个程序,首先要

2、编辑一个源文件,这个源文件可以是汇编语言,其其后缀名为后缀名为.asm ,也可以是,也可以是C语言语言,其后缀名为其后缀名为.C 。 汇编语言的指令集有两种,汇编语言的指令集有两种,助记助记符指令集(符指令集(Mnemonic Instruction Set)代数指令集代数指令集(Algebraic Instruction Set)。 C语言则符合标准语言则符合标准C、C+格式。格式。 编辑好汇编语言源文件后,我们需要对这个文件进行编辑好汇编语言源文件后,我们需要对这个文件进行“汇编汇编”,从而生成一,从而生成一个个.obj后缀的中间文件。后缀的中间文件。第3页/共58页 之后,通过一个之后,

3、通过一个“链接链接”动作,把动作,把.obj文件生成一个文件生成一个DSP可以执行的文件,后可以执行的文件,后缀为缀为.out。链接的作用是分配执行文件代码在链接的作用是分配执行文件代码在DSP内部程序空间的和数据空间的位内部程序空间的和数据空间的位置。这些分配,通过一个后缀为置。这些分配,通过一个后缀为.cmd的文件告诉链接命令。的文件告诉链接命令。 最后,将调试成功的最后,将调试成功的.out代码通过十六进制转换程序转化为可固化在可擦写存代码通过十六进制转换程序转化为可固化在可擦写存储器中,实现储器中,实现DSP自动脱机运行。自动脱机运行。 第4页/共58页二、编译工具及其使用二、编译工具

4、及其使用TMS320C54xV3.50版代码生成工具程序第5页/共58页(一)、编译工具(一)、编译工具 C编译器 汇编器 归档器 连接器第6页/共58页 asm500 input file object file listing file -options input file: 汇编源文件名,缺省后缀为汇编源文件名,缺省后缀为.asm; object file: 编译输出的编译输出的OBJ文件名文件名,缺省后缀为缺省后缀为.obj; listing file: 产生的列表文件名产生的列表文件名,缺省后缀为缺省后缀为.lst; options: 编译器使用的各种选择。编译器使用的各种选择。1

5、 1 、汇编器、汇编器第7页/共58页 -c:若使用该选项,编译器忽略字母的大小写。例如若使用该选项,编译器忽略字母的大小写。例如abc与与ABC是一样的。系统缺是一样的。系统缺省为区分大小写。省为区分大小写。 - -i i:设置搜索路径。通知编译器在指定的搜索路径中去查找设置搜索路径。通知编译器在指定的搜索路径中去查找. .copy,.includecopy,.include中的中的文件。文件。用法举例:用法举例:- -ic:c54xic:c54x。 -l: (-l: (小写的小写的L L)在编译时产生列表文件,缺省后缀为在编译时产生列表文件,缺省后缀为. .lstlst第8页/共58页 -

6、mg: 汇编源程序使用代数指令集汇编源程序使用代数指令集 或在源代码中使用或在源代码中使用 -s:将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符将所有的符号都放入符号表。若不使用该选项,编译器仅将全局变量放入符号表号表 -v: 指定版本。特别是需要使用指定版本。特别是需要使用BOOTLOADERBOOTLOADER时,应加时,应加- -v548v548开关开关 编译指令执行和参数设置,也可在编译指令执行和参数设置,也可在CCSCCS中进行。中进行。第9页/共58页2 2 、归档器、归档器Ar500 -commandoptionlibnamefilenameuCommand:

7、 指示归档器行为 a:加入某文件到库文件中 d:从库文件中删除文件 r:替换库文件中某变量 x:抽取库文件中某变量第10页/共58页归档器归档器 Option:归档器工作 -q :不显示状态栏及相关信息; -s :打印全局变量; Libname: 库文件名 Filename:目标文件 Ar500 -a function sine.obj cos.obj flt.obj第11页/共58页3 3 、连接器、连接器lnk500 -options filename 1 . . filename n -e global_symbol:定义程序的进入点;定义程序的进入点; -c:使用使用C编译器的编译器的

8、ROM初始化模式;初始化模式; -cr:使用使用C编译器的编译器的RAM初始化模式;初始化模式; -i dir:指定库文件的路径;指定库文件的路径; -l filename:指定连接时使用的库文件名;指定连接时使用的库文件名; -m filename:生成生成map文件;文件; -o filename:指定生成的指定生成的out文件名。系统缺省为文件名。系统缺省为a.out.第12页/共58页连接器连接器 文件也可以在命令文件中设置,通常使用系统默认值,即不需设置文件也可以在命令文件中设置,通常使用系统默认值,即不需设置; 选项可以在命令文件中设置,效果一样选项可以在命令文件中设置,效果一样;

9、 具体执行也是在具体执行也是在CCS中中; LNK500LNK500生成的生成的OUTOUT文件不是纯二进制代码文件,而是包含代码、符号表、代码定位信息文件不是纯二进制代码文件,而是包含代码、符号表、代码定位信息的复合文件的复合文件 通过查看通过查看MAPMAP文件可以获得变量、子程序等符号的具体地址。注意:文件可以获得变量、子程序等符号的具体地址。注意:MAPMAP文件只列出全文件只列出全局变量的地址。(用局变量的地址。(用. .globalglobal说明的符号)说明的符号)第13页/共58页 段的概念 汇编器对段的处理 链接器对段的处理 .(二)、公共目标文件格式(二)、公共目标文件格式

10、第14页/共58页1 1 COFFCOFF文件的基本单元文件的基本单元段段 段(sections)是COFF文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段。 段可以分为两大类,即已初始化段和未初始化段。如图1 所示为目标文件中的段与目标系统中存储器的关系。第15页/共58页图3 目标文件中的段与目标存储器的关系第16页/共58页2 汇编器对段的处理汇编器对段的处理2.1 未初始化段 未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段

11、在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量。未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为:.bss符号,字数 符号.usect“段名”,字数第17页/共58页汇编器对段的处理汇编器对段的处理2.2已初始化段 已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54X存储器中。三个用于建立初始化段的伪指令句法分别为: .text段起点 .data段起点 .sect“段名”,段起点第18页/共58页汇编器对段的处理汇编器对段的处理2.3命名段 命名段就是程序员自己定义的

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

13、计数器(SPC) 汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。第21页/共58页图2 产生的目标代码第22页/共58页3 链接器对段的处理链接器对段的处理 链接器对段的处理有两个功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次

14、,链接器为输出段选择存储器地址。第23页/共58页链接器对段的处理链接器对段的处理 链接器有两个命令完成上述功能,即: MEMORY 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。 SECTIONS命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。 第24页/共58页图3 链接器默认的存储器分配第25页/共58页4 重新定位重新定位4.1链接时重新定位 将各个段定位到存储器中,每个段都从合适的地址开始。 将符号值调整到相对于新的段地址的数值。 调整对重新定位后符号的引

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

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

17、符 号 ; . r e f 在 当 前 模 块 中 引 用 , 但 在 别 的 模 块 中 定 义 的 符号;.global可用于以上任何一种情况。第29页/共58页三三 汇编伪指令汇编伪指令汇编语言文件的内容汇编语言文件的内容 汇编语言指令;汇编语言指令; 汇编指令(伪指令);汇编指令(伪指令); 注释语句;注释语句;第30页/共58页表5-2 常用的汇编伪指令第31页/共58页汇编伪指令汇编伪指令1段定义伪指令 为便于链接器将程序、数据分段定位于指定的(物理存在的)存储器空间,并将不同的obj文件链接起来。段的使用非常灵活,但常用以下约定: .text 此段存放程序代码。 .data 此段

18、存放初始化了的数据。 .bss 此段存入未初始化的变量。 .sect 名称 定义一个有名段,放初始化了的数据或程序代码。第32页/共58页汇编伪指令汇编伪指令2条件汇编伪指令 .if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。 .if expression 标志条件块的开始,仅当条件为真(expression的值非0即为真)时汇编代码。 .elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编代码块。 .else 标志若.if条件为假时要汇编代码块。 .endif 标志条件块的结束,并终止该条件代码块。

19、第33页/共58页汇编伪指令汇编伪指令3引用其他文件 .include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。 .copy 文件名 与.include类似。 .def 符号名 在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名 在其他文件中定义,可以在本文件中使用的符号。 .global 符号名 其作用相当于.def、.ref效果之和。第34页/共58页汇编伪指令汇编伪指令4 初始化常数伪指令 对于初始化段,可以使用下列伪指令定义初始化数据对于初始化段,可以使用下列伪指令定义初始化数据 .long .word/.int .byte .string

20、例子同前页例子同前页 对于未初始化段,可以使用下列伪指令来保留空间对于未初始化段,可以使用下列伪指令来保留空间 .space 例如:例如: lable: .space 19 表示当前段中保留表示当前段中保留19bit空间,首地址为空间,首地址为lable。 也可以如前面例子中也可以如前面例子中 .bss sym, 19 ; Reserve space in .bss 第35页/共58页5、段程序计数器段程序计数器(SPC)定位指令定位指令 SPC用于记录每个段的当前的指针位置,便于编用于记录每个段的当前的指针位置,便于编译器分配各个段译器分配各个段 .align其后只能是其后只能是2027间的

21、间的2的幂值,其后不带的幂值,其后不带参数,默认为参数,默认为128,即对准页边界,为,即对准页边界,为1表示对准表示对准字边界,为字边界,为2表示对准偶数边界,为表示对准偶数边界,为N表示对准页表示对准页内的第内的第N个字边界个字边界 通常作用是使通常作用是使SPC对准字边界,偶地址边界或者对准字边界,偶地址边界或者页边界页边界汇编伪指令第36页/共58页第37页/共58页汇编伪指令汇编伪指令6 其它指令 .mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。 .title 为汇编器提供一个打印在每一页顶部的标为汇编器提供一个打印在每一页顶部

22、的标题题 . .set set 把一个常数等效为一个符号把一个常数等效为一个符号 .end 程序块结束。第38页/共58页汇编伪指令汇编伪指令4宏定义和宏调用 TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。 宏定义如下: Macname .macroparameter 1,parameter n .mexit .endm 第39页/共58页四四 链接器命令文件的编写与使用链接器命令文件的编写与使用 文件参数 MEMORY伪指令 SECTIONS伪指令第40页/共58页文件参数 -m: 生成生

23、成mapmap文件文件 -stack: :保留存储区为未初始化变量保留存储区为未初始化变量 -o: 输出文件输出文件链接器命令文件第41页/共58页链接器命令文件链接器命令文件 MEMORY伪指令就是用来指定目标存储器的模型。MEMORY伪指令的一般语法为:第42页/共58页链接器命令文件链接器命令文件第43页/共58页链接器命令文件链接器命令文件第44页/共58页第45页/共58页段指令语法:段指令语法: SECTIONS伪指令功能如下: 说明如何将输入段组合成输出段。 在可执行程序中定义输出段。 指定输出段在存储器中存放的位置。 允许对输出段重新命名链接器命令文件第46页/共58页链接器命

24、令文件链接器命令文件第47页/共58页第48页/共58页链接器命令文件链接器命令文件例子 :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页图 段的定位第50页/共58页链接器命令文件链接器命令文件系统默认状态系统默认状态图 链接器默认的存储器分配 缺省情况下,连接器从地址080h依次放入。第51页/共58页五五 汇编语言程序编写方法汇编语言程序编写方法 汇编语言源程序格式 汇编语言中的常数和字符串第52页/共58页(一)(一) 汇编语言源程序格式汇编语言源程序格式 助记符指令一般包含4个部分,其一般组成形式为: 标号: 助记符 操作数 ;注释 语句的开头

温馨提示

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

评论

0/150

提交评论