《TMS320C54x软件开发课件》由会员分享,可在线阅读,更多相关《TMS320C54x软件开发课件(31页珍藏版)》请在金锄头文库上搜索。
1、第第4章章 TMS320C54x软件开发软件开发n4.1 软件开发过程及开发工具软件开发过程及开发工具n4.2 公共目标文件公共目标文件COFF的一般概念的一般概念n4.3 常用汇编伪指令常用汇编伪指令n4.4 链接器命令文件的编写与使用链接器命令文件的编写与使用n4.5 汇编语言程序编写方法汇编语言程序编写方法4.1 软件开发过程及开发工具软件开发过程及开发工具1建立源程序建立源程序2C编译器(编译器(C Compiler)3汇编器(汇编器(Assembler)4连接器(连接器(Linker)5调试工具调试工具6十六进制转换公用程序(十六进制转换公用程序(Hex Conversion Uti
2、lity) 返回首页返回首页文本.asm编译.obj链接器.out可执行程序-o-l*.lst-m*.map*.obj图图4-1 TMS320C54x DSP软件开发流程软件开发流程n段段(sections)是是COFF文文件件中中最最重重要要的的概概念念。一一个个段段就就是是最最终终在在存存储储器器映映象象中中占占据据连连续续空空间间的的一一个个数数据据或或代代码码块块。目目标标文文件件中中的的每每一一个个段段都都是是相相互互独独立立的的。一一般般地地,COFF目目标标文文件件包包含含3个个缺缺省的段:省的段:text段、段、data段、段、bss段。段。n段可以分为已初始化段和未初始化段。
3、如图段可以分为已初始化段和未初始化段。如图5-2所所示为目标文件中的段与目标系统中存储器的关系。示为目标文件中的段与目标系统中存储器的关系。4.2 公共目标文件公共目标文件COFF的一般概念的一般概念图图4-2 目标文件中的段与目标存储器的关系目标文件中的段与目标存储器的关系返回本节段定义伪指令段定义伪指令 为为便便于于链链接接器器将将程程序序、数数据据分分段段定定位位于于指指定定的的(物物理理存存在在的的)存存储储器器空空间间,并并将将不不同同的的obj文文件件链链接接起起来来。段段的的使使用用非非常常灵灵活活,但但常用以下约定:常用以下约定:n未初始化段未初始化段.bss 此段存入未初始化
4、的变量。此段存入未初始化的变量。.usect 未初始化,有命名,未初始化,有命名, 为变量保留空间为变量保留空间n初始化段初始化段.data 此段存放初始化了的数据。此段存放初始化了的数据。.text 此段存放程序代码。此段存放程序代码。.sect 名称名称 定义一个有名段,放初始化了的数据或程序代码。定义一个有名段,放初始化了的数据或程序代码。1. 未初始化段未初始化段(1) .bss 符号符号, 字数字数 (2) .usect “段名段名”,字数,字数2. 已初始化段已初始化段(1) .text 段起点段起点 此段存放程序代码。此段存放程序代码。(2) .data 段起点段起点 此段存放初
5、始化了的数据。此段存放初始化了的数据。(3) .sect “段名段名” ,段起点段起点 定定义义一一个个有有名名段段,放放初初始始化化了了的的数数据据或或程序代码。程序代码。段命令应用举例段命令应用举例 源代码如下:源代码如下:2 .data3 coeff .word 044h, 055h, 088h4 .bss buffer, 8 5 prt .word 0456h6 .text7 add: LD 0Dh, A8 aloop: SUB #1 , A 9 BC aloop, AGEQ10 .data11 ivals .word 0cch,0ddh,0eeh12 var2 .usect “new
6、vars”, 2 13 inbuf .usect “newvars”, 8 14 .text15 mpy: LD 0Ah, B16 mloop: MPY #0A, B17 BC mloop, BNOV18 .sect “vectors”19 .word 044h, 088h .text100df0100001f8420001110af166000af8680006.data004400550088045600cc00dd00ee.vectors00440088.bss保留8个字.newvars保留10个字解释:本例共解释:本例共5个段个段.text:含有含有7个字的代码个字的代码.data:7
7、个字的数据个字的数据.vectors:已初始化命名段:已初始化命名段 有有2个字已知数据个字已知数据.bss和和.newvars:未未初初始始化化命命名名段段,留留有有8个个字字和和10个字的空间个字的空间 段命令应用举例段命令应用举例2 0000 .data3 0000 0044 coeff .word 044h,055h,088h 0001 0055 0002 00884 0000 .bss buffer, 8 5 0003 0456 prt .word 0456h6 0000 .text7 0000 100d add: LD 0Dh, A8 0001 f010 aloop: SUB #1
8、 , A 0002 00019 0003 f842 BC aloop, AGEQ 0004 000110 0004 .data11 0004 00cc ivals .word 0cch,0ddh,0eeh 0001 00dd 0002 00ee12 0000 var2 .usect “newvars”, 2 13 0001 inbuf .usect “newvars”, 8 14 0005 .text15 0005 110a mpy: LD 0Ah, B16 0006 f010 mloop: MPY #0A, B 0007 000a17 0008 f868 BC mloop, BNOV 000
9、9 000618 0000 .sect “vectors”19 0000 0044 .word 044h, 088h 0001 0088 段程序计数器(段程序计数器(SPC)n汇编器为每个段安排一个独立的程序计数器,即汇编器为每个段安排一个独立的程序计数器,即段程序计数器(段程序计数器(SPC)。)。SPC表示一个程序代码表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每段或数据段内的当前地址。开始时,汇编器将每个个SPC置置0,当汇编器将程序代码或数据加到一个,当汇编器将程序代码或数据加到一个段内时,相应的段内时,相应的SPC增加。如果汇编器再次遇到增加。如果汇编器再次遇到相同段名的
10、段,继续汇编至相应的段,且相应的相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。在先前的基础上继续增加。n链链接接器器对对段段的的处处理理有有两两个个功功能能。首首先先,它它将将汇汇编编器器产产生生的的COFF目目标标文文件件(.obj文文件件)中中的的各各种种段段作作为为输输入入段段,当当有有多多个个文文件件进进行行链链接接时时,它它将将输输入入段段组组合合起起来来,在在可可执执行行的的COFF输输出出模模块块中中建建立立各各个个输输出出段段。其其次次,链链接接器器为为输输出出段段选选择择存存储器地址。储器地址。图图4-4 链接器默认的存储器分配链接器默认的存储器分配
11、返回本节4.3 常用汇编伪指令常用汇编伪指令返回首页汇编命令汇编命令作用作用举例举例.title紧跟其后用紧跟其后用“”括起的源程序名括起的源程序名.title “example.asm”.mmregs将存储器映像寄存器加入到符号表将存储器映像寄存器加入到符号表即加上即加上.mmregs,在指令中才可以用,在指令中才可以用MMR.end结束汇编命令结束汇编命令放在汇编源程序的最后放在汇编源程序的最后.text紧跟其后的是汇编语言程序正文紧跟其后的是汇编语言程序正文.data紧跟其后的是已初始化的数据紧跟其后的是已初始化的数据.int (.word).space 设置一个或多个设置一个或多个16
12、位无符号(有符号)整型常数位无符号(有符号)整型常数用标号指出保留一段空间用标号指出保留一段空间table: .int 20,-20SINT17: .space 4*16.bss未初始化变量保留空间未初始化变量保留空间.bss x,4.sect已初始化命名段已初始化命名段.sect “vectors”.usect未初始化命名段未初始化命名段stack .usect “stack” ,10h.def .ref.def说明符号在其它的文件中可以引用说明符号在其它的文件中可以引用.ref说明符号在其它文件中定义,在本文件中引用说明符号在其它文件中定义,在本文件中引用.global可以替代上面的可以替
13、代上面的.def或者或者.ref.set .asg使一个值与一个符号相等使一个值与一个符号相等将一个字符赋值给字符串将一个字符赋值给字符串Period .set 99 .asg AR1, Counter.align边界对其边界对其.align 0X80 .macro .endm宏指令宏指令宏定义和宏调用宏定义和宏调用nTMS320C54x汇汇编编支支持持宏宏语语言言。如如果果程程序序中中需需要要多多次次执执行行某某段段程程序序,可可以以把把这这段段程程序序定定义义(宏宏定定义义)为为一一个个宏宏,然然后在需要重复执行这段程序的地方调用这条宏。后在需要重复执行这段程序的地方调用这条宏。n宏定义如
14、下:宏定义如下:Macname .macroparameter 1,parameter n .mexit .endm 返回本节宏定义例子:宏定义例子:Add3 .macro P1,P2,P3,ADDRPLD *(P1),AADD *(P2), AADD *(P3), ASTL A,*(ADDRP)宏调用例子宏调用例子 : .bss y,1 .bss a1,1 .bss a2,1 .bss a3,1Add3 a1,a2,a3,y返回本节4.4 链接器命令文件的编写与使用链接器命令文件的编写与使用n4.4.1 MEMORY伪指令及其使用伪指令及其使用n4.4.2 SECTIONS伪指令及其使用伪指
15、令及其使用 链链接接器器的的主主要要作作用用是是根根据据链链接接命命令令或或者者命命令令文文件件(*.cmd),将将一一个个或或者者多多个个COFF文文件件链链接接起起来来,生生成成MAP文文件件(存存储器映射文件)和储器映射文件)和out(输出)文件(输出)文件MEMORY: 对存储器进行分配对存储器进行分配SECTIONS :对各段在存储器的位置进行分配:对各段在存储器的位置进行分配返回首页n链接器有两个命令完成上述功能,即:链接器有两个命令完成上述功能,即:nMEMORY 命命令令定定义义目目标标系系统统的的存存储储器器配配置置图图,包包括括对对存存储储器器各各部部分分的的命命名名,以以
16、及及规规定定它它们们的起始地址和长度。的起始地址和长度。nSECTIONS命令命令告诉链接器如何将输入段组告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。命令指定子段。 4.4.1 MEMORY伪指令及其使用伪指令及其使用nMEMORY伪指令就是用来指定目标存储器的模型。伪指令就是用来指定目标存储器的模型。MEMORY伪指令的一般语法为:伪指令的一般语法为:MEMORY PAGE0: name1(attr): orign=consta
17、nt, length=constant; PAGE1: name2(attr): orign=constant, length=constant;例:例:MEMORY PAGE0: ROM: orign=c00h, length=1000h; PAGE1: SCRATCH: orign=60h, length=20h; ONCHIP : orign=80h, length=200h;返回本节4.4.2 SECTIONS伪指令及其使用伪指令及其使用nSECTIONS伪指令功能如下:伪指令功能如下:n 说明如何将输入段组合成输出段。说明如何将输入段组合成输出段。n在可执行程序中定义输出段。在可执行
18、程序中定义输出段。n指定输出段在存储器中存放的位置。指定输出段在存储器中存放的位置。n允许对输出段重新命名。允许对输出段重新命名。n SECTIONS name : property ,property ,property . name : property ,property ,property . name : property ,property ,property . 图图4-5 例例4-6中段的定位中段的定位返回本节vectors.objexample.obj-o example.out-m example.mapMEMORY PAGE0: EPROM: org=0090H, len
19、gth=0F70H; VECS: org=0080H, length=0010H; /程序段程序段 PAGE0: SPRAM: org=1000H, length=1000H; DARAM: org=2000H, length=2000H; /数据段数据段SECTION .text : EPROM PAGE0 .data : EPROM PAGE0 .bss : SPRAM PAGE1 STACK : DARAM PAGE1 .vectors : VECS PAGE0返回本节4.5 汇编语言程序编写方法汇编语言程序编写方法n4.5.1 汇编语言源程序格式汇编语言源程序格式n4.5.2 汇编语言
20、中的常数和字符串汇编语言中的常数和字符串n4.5.3 汇编源程序中的符号汇编源程序中的符号n4.5.4 汇编源程序中的表达式汇编源程序中的表达式 返回首页4.5.1 汇编语言源程序格式汇编语言源程序格式n助记符指令一般包含助记符指令一般包含4个部分,其一般组成形式为:个部分,其一般组成形式为:n标号标号: 助记符助记符 操作数操作数 ;注释;注释1标号区标号区n所所有有汇汇编编指指令令和和大大多多数数汇汇编编伪伪指指令令前前面面都都可可以以带带有有标标号号,标标号号可可以以长长达达32个个字字符符,由由AZ、az、09、_、和和$符符号号组组成成,且且第第一一个个字字符符不不能能是是数数字,区
21、分大小写字,区分大小写。 2助记符区助记符区n助记符区不能从第一列开始,否则被认为是标号。助记符区不能从第一列开始,否则被认为是标号。3操作数区操作数区n操操作作数数区区是是一一个个操操作作数数列列表表,可可以以是是常常数数、符符号号或或常常数数与与符号构成的表达式。操作数间需用符号构成的表达式。操作数间需用“,”号隔开。号隔开。4注释区注释区n注释区可以从任何一列开始,可以包含注释区可以从任何一列开始,可以包含ASCII字符和空格。字符和空格。 返回本节4.5.2 汇编语言中的常数和字符串汇编语言中的常数和字符串表5-3 COFF常数与字符串返回本节4.5.3 汇编源程序中的符号汇编源程序中
22、的符号1标号标号2局部标号局部标号3符号常数符号常数4先定义的符号常数先定义的符号常数5替代符号替代符号表表4-4 可以用在表达式中的运算符可以用在表达式中的运算符表表4-5 带有绝对符号、可重定位符号的表达式带有绝对符号、可重定位符号的表达式返回本节4.5.4 汇编源程序中的表达式汇编源程序中的表达式n表表达达式式可可以以是是常常数数、符符号号或或由由算算术术运运算算符符结结合合的的常常 数数 和和 符符 号号 。 表表 达达 式式 值值 的的 有有 效效 范范 围围 为为 -3276832767。1运算符(运算符(表表4-4 所示)所示)2合格的表达式合格的表达式(表表4-5所示所示 )返
23、回本节计算计算: y=a1*x1+a2*x2+a3*x3+a4*x4.title “example.asm”.mmregsSTACK .usect “STACK”,10H .bss a , 4 .bss x , 4 .bss y , 1 .def start .datatable: .word 1,2,3,4 .word 8,6,4,2 .textstart: STM #0,swwsr STM #STACK+10h,sp STM #a,AR1 RPT #7 MVPD table,*AR1+ CALL SUMend: B end SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3 MAC *AR3+,*AR4+,A STL A,*(y) RET .end