《TMS320C54x应用程序开发过程[DSP技术与应用实例(第3版)].ppt》由会员分享,可在线阅读,更多相关《TMS320C54x应用程序开发过程[DSP技术与应用实例(第3版)].ppt(46页珍藏版)》请在三一办公上搜索。
1、第4章 TMS320C54x应用程序开发过程,4.1 DSP应用系统开发方法4.2 TMS320C54x应用软件开发4.3 汇编语言程序的编写方法4.4 公共目标文件格式4.5 汇编器4.6 链接器4.7 汇编源程序的编辑、汇编和链接过程,4.1 DSP应用系统开发方法,4.1.1 数字信号处理的特点,数字信号处理包括如下两方面的内容:,(1)算法研究(2)数字信号处理的系统实现,实现一般有以下两种方法:,利用通用的计算机或微机,通过软件的方法实现;利用专用的数字设备实现。,特点:要求很高的处理速度和可编程特性,4.1.2 数字信号处理系统的设计过程,一个应用系统的设计过程大致分为7个部分:,
2、4.2 TMS320C54x应用软件开发,4.2.1 TMS320C54x应用软件开发流程,4.2.2 TMS320C54x开发工具,(1)C编译器(C compiler)(2)汇编器(assembler)(3)链接器(linker)(4)存档器(archiver)(5)助记符到代数式指令翻译器(mnemonic to algebraic translator utility)(6)建库工具(library-build utility)(7)十六进制转换工具(hex conversion utility)(8)绝对地址列表器(absolute lister)(9)交叉引用列表器(cross-r
3、eference lister),开发工具:,调试工具:,软件仿真器(Simulator);集成开发环境(CCS);可扩展的开发系统仿真器(XDS510);硬件开发模块(EVM板)。,4.3 汇编语言程序的编写方法,4.3.1 汇编语言源程序格式,1源文件句法,(1)助记符指令语法格式:标号区:助记符区 操作数区;注释区(2)代数指令语法格式:标号区:指令区;注释区,汇编语言编写程序的一般规则:,所有语句必须以标号、空格、星号或分号开始;所有包含汇编伪指令的语句必须在一行内完全指定;可以选择带有标号,若使用标号,则标号必须从第一列开始;每区必须用一个或多个空格分开,Tab字符键与空格等效;程序
4、中可以有注释,注释开始在第一列时,前面需标上星号(*)或分号(;),但在其他列开始的注释前面只能标上分号。,常用的汇编命令:,2标号区,所有汇编指令和大多数(但不是所有)汇编伪指令前面都可选择带有语句标号,使用时,它必须从第一列开始。标号可以长达32个字符,由字母、数字及下划线和美元符号(AZ,az,09,_,$)等组成。标号区分大小写,且第一个字符不能是数字。标号后面可以带冒号(:),但冒号并不处理为标号名的一部分。若不使用标号,则语句的第一列必须是空格、星号或分号。在使用标号时,标号的值是段程序计数器(SPC)的当前值。例如,使用.word伪指令初始化几个字,则标号将指到第一个字。,3助记
5、符区,操作数区是一个操作数的列表,紧跟在助记符区的后面,由一个和多个空格分开。操作数可以是常数、符号或在表达式中常数与符号的结合,是指令中的操作数或汇编命令中定义的内容。操作数之间必须用逗号“,”分开。有的指令无操作数,如NO、RESET。对指令的操作数前缀的规定 对伪指令的立即数的规定,(1)助记符区,助记符区跟在标号区的后面。助记符区一定不能从第一列开始。若从第一列开始,将被认为是标号。助记符指令一般用大写。汇编命令和宏命令以句点“”开始,且为小写。汇编命令可以形成常数和变量,当用它控制汇编和链接过程时,可以不占存储空间。助记符区可以包含以下的操作码之一:机器-指令助记符(例如,STM,M
6、AC,MPVD,STL);汇编伪指令(例如,.data,.list,.set);宏伪指令(例如,.macro,.var,.mexit);宏调用。,(2)操作数区,4代数指令区,操作数不用逗号分开,但某些代数指令由助记符和操作数组成。对这种形式的代数指令语句,要用逗号将操作数分开,例如:lms(Xmem,Ymem)。具有多个项但作为单操作数用的表达式必须用括号分开。这个规则不适用于使用函数调用格式的语句,因为它们已经包括在括号之中了。例如:A=B(1sym)5 表达式1sym被作为单操作数,因此要用括号括起。保留所有寄存器名。对于由助记符和操作数组成的代数指令,保留助记符字。,5注释区,注释
7、可在任何一列开始并可扩展到每行的结尾。注释可包含ASCII字符和空格。注释打印在汇编源清单中,但不影响汇编工作。源语句中仅有注释也是有效语句。若注释开始在第一列,则须以分号(;)或星号(*)开头;开始在其他任何列的注释都只能以分号开头。,4.3.2 汇编语言中的常数与字符串,1二进制整型常数2八进制整型常数3十进制整型常数4十六进制整型常数5浮点常数6字符常数7汇编-时间常数,4.3.3 汇编源程序中的符号,1标号2符号常数3定义符号常数(-d选项)4预先定义的符号常数5替代符号6局部标号,4.3.4 汇编源程序中的表达式,1运算符,2表达式上溢和下溢,在汇编时,执行算术操作后,汇编器检查上溢
8、和下溢的条件。一旦上溢和下溢出现,它就发出截断了的警告。汇编器不检查乘法的上溢和下溢。,3合格的表达,某些汇编器要求合格的表达式作为操作数。合格的表达式是指表达式中的符号或汇编时间常数在遇到它们之前都是已经定义了的,合格的表达式的计算必须是绝对的。,4条件表达式,汇编器支持关系操作,可用于任何表达式,这对条件汇编特别有用。有以下一些关系操作:等于 等于!不等于 大于或等于 小于或等于 大于 小于 条件表达式为真时,其值为1,否则为0。它们仅可用在等效类型的操作数中,例如,绝对的值只能和绝对的值相比较,但不能和可重新定位的值相比较。,5可重新定位符号和合法表达式,4.4 公共目标文件格式,4.4
9、.1 COFF文件中的段,COFF目标文件都包含以下3种形式的段:,text 段(此段通常包含可执行代码)data 段(此段通常包含初始化数据)bss 段(此段通常为未初始化变量保留存储空间),段有以下两种基本类型:,(1)初始化段初始化段中包含数据或程序代码。它包括:.text段,是已初始化段;.data段,是已初始化段;.sect汇编命令建立的自定义段,也是已初始化段。(2)未初始化段在存储空间中,为未初始化数据保留存储空间。它包括:.bss段,是未初始化段;.usect汇编命令建立的自定义段,也是未初始化段。,目标文件中的段与目标存储器之间的关系:,汇编器伪指令可以用来将数据和代码的各个
10、部分与相应的段相联系。汇编器在汇编的过程中,根据汇编命令,用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器的一个任务就是分配存储单元,即把各个段重新定位到目标存储器中,如上图所示。,4.4.2 汇编器对段的处理,1未初始化段,未初始化段分为默认的和命名的两种,分别由汇编器伪指令.bss和.usect产生。两种伪指令的句法如下:.bss 符号,字数符号.usect 段名,字数,2初始化段,初始化伪指令的句法如下:.text 段起点.data 段起点.sect 段名,段起点,3命名段,命名段伪指令的使用句法为:符号.usect 段名,字数.sect 段名,4子段,子段命名的句法为:基
11、段名:子段名,可用如下命令:.sect.text:_func,5段程序计数器(SPC),汇编器为每个段都安排一个单独的程序计数器段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。一开始,汇编器将每个SPC置0。当汇编器将程序代码或数据加到一个段内时,相应的SPC就增加。如果继续对某个段进行汇编,则相应的SPC就在先前的数值上继续增加。链接器在链接时要对每个段进行重新定位。,4.4.3 链接器对段的处理,链接器在处理段的时候,有如下两个主要任务:(1)将由汇编器产生的COFF格式的OBJ文件作为输入块,当有多个文件进行链接时,将相应的段结合在一起,产生一个可执行的COFF输出
12、模块。(2)重新定位,将输出的段分配到存储器的指定地址。链接器有两条命令支持上述任务:(1)MEMORY命令定义目标系统的存储器配置图,包括对存储器各部分命名,以及规定它们的起始地址和长度。(2)SECTIONS命令告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器中的什么位置。子段可用来更精细地编排段。可用链接器的SECTIONS命令指定子段。若没有明显的子段,则子段将和具有相同基段名称的其他段结合在一起。,链接器将输入段组合成一个可执行的目标模块,4.4.4 程序重新定位,1链接时重新定位2运行时间重新定位,4.4.5 程序装入,TMS320C54x调试工具(debugging t
13、ools),包括软件模拟器、XDS仿真器和集成开发系统CCS。它们都具有内部的装入器,这些工具都包含调用装入器的LOAD命令。装入器读取可执行文件,将程序复制进目标系统的存储器中。采用Hex转换工具(Hex conversion utility)。,4.4.6 COFF文件中的符号,1外部符号2符号表,4.5 汇编器,4.5.1 汇编器及其调用,asm500 input file object filelisting file-options,input file为汇编源文件的名称object file为汇编器产生的TMS320C54x目标文件listing file为汇编器产生的供选择的清单
14、文件options选项定义使用汇编器选项,【例4-25】输入 asm500 example.asm-l-s-x 源程序example.asm经汇编后将生成一个列表文件、一个目标文件、一个符号表(在目标文件中)及一个交叉引用表。,4.5.2 汇编器的内部函数,4.5.3 汇编器伪指令,汇编器伪指令是汇编语言程序的一个重要内容,它给程序提供数据并且控制汇编过程。汇编伪指令可以完成以下工作:将代码和数据汇编进指定的段中;在存储器中为未初始化的变量保留空间;控制是否产生清单文件;初始化存储器;汇编条件代码块;声明全局变量;为汇编器指定从中可以获得宏的库;考察符号调试信息。,1定义段的伪指令,2初始化常
15、数的伪指令,3对准段程序计数器的伪指令,4格式化输出清单文件的伪指令,5引用其他文件的伪指令,.bes.space 等,.align.even,.drnolist.fclist 等,.copy.include 等,4.5.4 列表文件,汇编器对源程序汇编时,如果使用了选项-l(小写L),则汇编器将产生一个列表文件,列表文件中包含源程序语句和目标代码。,1源文件语句的编号,(1)行号(2)包括文件字母(3)嵌套级编号,2段程序计数器,该域包含段程序计数器SPC(section program counter)的值(十六进制)数,每一个段(.text、.data、.bss和命名段)使用分开的段程序
16、计数器SPC。有些伪指令不影响SPC,此时该域将为空格。,3目标码,该域包含汇编生成的十六进制数的目标代码(object code)。所有机器指令和伪指令的代码都在该域中列出。,4源文件语句域,源文件语句域包含输入给汇编器的源文件语句。汇编器所接受的每行最大长度为200个字符。域中的空格由源文件中的空格确定。,4.5.5 交叉引用清单,交叉引用清单(cross-reference listings)说明源文件中的符号及其定义。在汇编时,调用汇编器的-x选项或者利用.option伪指令,就可以在列表文件最后的专门一页列出交叉引用清单。当汇编器对包含.include伪指令的汇编文件产生交叉引用清单
17、时,通过在每个include文件附上一个参考字母(A,B,C等)来保持include文件的记录和符号在被定义和引用时的行号,按照在汇编源文件中遇到.include伪指令的次序来附上字母。,4.6 链接器,链接时的输入/输出文件:,链接器调用命令为:lnk500 filename1filenamen-options,链接器选项:,4.6.2 链接器命令文件的编写与使用,链接命令文件是将链接的信息放在一个文件中,这样,如果需要多次使用同样的链接信息,可以方便地调用。在命令文件中可用两个十分有用的伪指令MEMORY和SECTIONS,指定实际应用中的存储器结构和进行地址的映射。在命令行中不能使用这两
18、个伪指令。命令文件为ASCII文件,可包含以下内容。输入文件名,用来指定目标文件、存档库或其他命令文件。注意,当命令文件调用其他命令文件时,该调用语句必须是最后一句。链接器不能从被调用的命令文件中返回。链接器选项,它们在命令文件中的使用方法与在命令行中相同。MEMORY和SECTIONS链接伪指令。MEMORY用来指定目标存储器结构,SECTIONS用来控制段的构成与地址分配。赋值说明,用于给全局符号定义和赋值。,1简单的命令文件与调用 用命令文件调用链接器的格式为:lnk500 command_filename,2在命令文件中使用链接伪指令 链接器提供两个重要的链接伪指令MEMORY和SEC
19、TIONS,用来将输出程序模块与实际的用户目标系统相联系。,3链接命令文件保留的关键字,4命令文件中的常数,4.6.3 目标库,目标库是用目标文件作为成员的存档文件。通常将一组有关的模块组合在一起形成一个库。,以下的例子链接了几个文件和库,假设:输入文件f1.obj和f2.obj均引用一个名为clrscr的外部函数;输入文件f1.obj引用符号origin;输入文件f2.obj引用符号fillclr;库libc.libc的成员Member 0包含origin的定义;库libc.liba的成员Member 3包含fillclr的定义;两个库的成员Member 1都定义clrscr。,4.6.4
20、MEMORY伪指令及其使用,链接器确定输出段应分配到存储器的什么地方,必须要有一个目标存储器的模型来 完成该项任务。MEMORY伪指令就是用来指定存储器的模型的。,MEMORY伪指令的的一般语法为:MEMORY PAGE 0:name 1(attr):origin=constant,length=constant PAGE n:name n(attr):origin=constant,length=constant,【例4-34】MEMORY伪指令的使用。file1.obj file2.obj-o prog.out-m prog.map-e start MEMORY PAGE 0:EPROM:
21、origin=0E00H length=1000H PAGE 1:SPRAM:origin=0060H length=0020H DARAM:origin=0080H length=1000H,4.6.5 SECTIONS伪指令及其使用,段伪指令SECTIONS的功能如下:,说明如何将输入的段结合成输出段;在可执行程序中定义输出段;指定输出段放置在存储器中的何处;允许对输出段重新命名。,SECTIONS伪指令语法:,SECTIONSname:property,property,property,name:property,property,property,name:property,prop
22、erty,property,【例4-35】SECTIONS伪指令的使用.file1.obj file2.obj-o prog.out-m prog.map-e start SECTIONS.text:load=ROM,run=800H.const:load=ROM.bss:load=RAM.vectors:load=FF80H t1.obj(.intvec1)t2.obj(.intvec2)endvec=.;.data:align=16,4.6.6 链接器应用实例,(1)编写复位向量文件vectors.asm.,【例4-36】复位向量文件vectors.asm。*Reset vectors f
23、or example.asm*.title vectors.asm.ref start.sect.vectors B start.end,(2)编写example.asm.,*example.asm y=a1x1+a2x2+a3x3+a4x4*.title example.asm.mmregsSTACK.usectSTACK,10H;allocate space for stack.bss a,4;allocate 9 word for variants.bss x,4.bss y,1.def start.datatable:.word 1,2,3,4;data follows.word 8,
24、6,4,2.text;code follows.start:STM#0,SWWSR;adds no wait states STM#STACK+10H,SP;set stack pointer STM#a,AR1;AR1 point a RPT#7;move 8 values MVPD table,*AR1+;from program memory;into data memory CALL SUM;call SUM subroutineend:B endSUM:STM#a,AR3;The subroutine implement STM#x,AR4;multiply-accumulate R
25、PTZ A,#3 MAC*AR3+,*AR4+,A STL A,y RET.end,(3)分别对两个源文件example.asm和vectors.asm进行 汇编,生成目标文件example.obj和vectors.obj。,(4)编写链接命令文件example.cmd。此命令文件链接 examples.obj和vectors.obj两个目标文件,并且生成 一个映像文件example.map及一个可执行的输出文 件example.out,标号“start”是程序的入口。,假设目标存储器的配置如下:程序存储器EPROM E000HFFFFH(片外)数据存储器SPRAM 0060H007FH(片内
26、)DARAM 0080H017FH(片内)链接器,命令文件参见例4-37。将要链接的目标文件名vectors.obj,example.obj及存储器配置要求,编写到链接器命令文件example.cmd中。,【例4-37】链接器命令文件example.cmd。vectors.objexample.obj-o example.out-m example.map-e startMEMORY PAGE 0:EPROM:org=0E000H len=0100H VECS:org=0FF80H len=0004H PAGE 1:SPRAM:org=0060H len=0020H DARAM:org=008
27、0H len=0100HSECTIONS.text:EPROM PAGE 0.data:EPROM PAGE 0.bss:SPRAM PAGE 1 STACK:DARAM PAGE 1.vectors:VECS PAGE 0,(5)链接。链接后生成一个可执行的输出文件example1.out 和映像文件example.map。,4.7 汇编源程序的编辑、汇编和链接过程,1编辑 利用诸如WORD,EDIT,记事本等文本编辑器,编写汇编语言源程序.asm。2汇编 利用TMS320C54x的汇编器ASM500对已经编好的一个或多个源文件分别进行汇编,并且生成.lst(列表)文件和.obj(目标)文件。asm500%l-s-l-x3链接 利用TMS320C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成存储器映像文件(.map)和输出文件(.out)。lnk500%l.cmd4调试(1)利用软件仿真器进行调试(2)利用硬件仿真器进行调试(3)利用评价模块进行调试5固化用户程序,