DSP原理及开发应用课件8.ppt

上传人:marr****208 文档编号:149516626 上传时间:2020-10-27 格式:PPT 页数:68 大小:2.24MB
返回 下载 相关 举报
DSP原理及开发应用课件8.ppt_第1页
第1页 / 共68页
DSP原理及开发应用课件8.ppt_第2页
第2页 / 共68页
DSP原理及开发应用课件8.ppt_第3页
第3页 / 共68页
DSP原理及开发应用课件8.ppt_第4页
第4页 / 共68页
DSP原理及开发应用课件8.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《DSP原理及开发应用课件8.ppt》由会员分享,可在线阅读,更多相关《DSP原理及开发应用课件8.ppt(68页珍藏版)》请在金锄头文库上搜索。

1、October 27, 2020,1,华中科技大学武昌分校,DSP原理及开发应用 黄向宇 ,October 27, 2020,2,第5章 TMS320C54x软件开发,5.1 软件开发过程及开发工具 5.2 公共目标文件格式 5.3 常用汇编伪指令 5.4 链接器命令文件的编写与使用 5.5 汇编语言程序编写方法 5.6 TMS320C54x C语言编程 5.7 用C语言和汇编语言混合编程,October 27, 2020,3,5.1 软件开发过程及开发工具,1建立源程序 2C编译器(C Compiler) 3汇编器(Assembler) 4连接器(Linker) 5调试工具 6十六进制转换公

2、用程序(Hex Conversion Utility),返回首页,October 27, 2020,4,图5-1 TMS320C54x DSP软件开发流程,October 27, 2020,5,表5-1 TMS320C54xV3.50版代码生成工具程序,返回本节,October 27, 2020,6,C编译器,C54x的C编译器完全支持标准C,C源程序经过C compiler编译生成C54x的汇编源代码,汇编源代码经Assembler生成一个COFF目标文件,Linker链接所有的目标文件,生成可执行的目标文件。,October 27, 2020,7,October 27, 2020,8,Oc

3、tober 27, 2020,9,5.2 公共目标文件格式,5.2.1 COFF文件的基本单元段 5.2.2 汇编器对段的处理 5.2.3 链接器对段的处理 5.2.4 重新定位 5.2.5 程序装入 5.2.6 COFF文件中的符号,返回首页,October 27, 2020,10,5.2.1 COFF文件的基本单元段,段(sections)是COFF文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段。 段可以分为两大类,即已初始化段和未初始化段。如图5

4、-2所示为目标文件中的段与目标系统中存储器的关系。,October 27, 2020,11,图5-2 目标文件中的段与目标存储器的关系,返回本节,October 27, 2020,12,5.2.2 汇编器对段的处理,1未初始化段 未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量。未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为: .bss符号,字数 符号.usect“段名”,字数,October 27, 2020,13,2已初始化段 已初始化段包含可执行

5、代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54X存储器中。三个用于建立初始化段的伪指令句法分别为: .text段起点 .data段起点 .sect“段名”,段起点,October 27, 2020,14,3命名段 命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。 data段不同的存储器中,将未初始化的变量汇编到与bss段不同的存储器中。产生命名段的伪指令为: 符号.usect“段名”,字数 .sect“段名”,段起点,October 27, 2020,15,4子段 子段(Subsections)是大段

6、中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名 子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。,October 27, 2020,16,5段程序计数器(SPC) 汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。,October 27, 2020,17,

7、图5-3 例5-1产生的目标代码,返回本节,October 27, 2020,18,5.2.3 链接器对段的处理,链接器对段的处理有两个功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次,链接器为输出段选择存储器地址。,October 27, 2020,19,链接器有两个命令完成上述功能,即: MEMORY 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。 SECTIONS命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放

8、输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。,October 27, 2020,20,图5-4 链接器默认的存储器分配,返回本节,October 27, 2020,21,5.2.4 重新定位,1链接时重新定位 将各个段定位到存储器中,每个段都从合适的地址开始。 将符号值调整到相对于新的段地址的数值。 调整对重新定位后符号的引用。,October 27, 2020,22,2运行时重新定位 将代码装入存储器的一个地方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的ROM中,但希望在较快的RAM中运行。 链接器提供

9、了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址。,返回本节,October 27, 2020,23,5.2.5 程序装入,(1)硬件仿真器和CCS集成开发环境,具有内部的装入器,调用装入器的LOAD命令即可装入可执行程序。 (2)将代码固化在片外存储器中,采用Hex转换工具(Hex conversion utility),例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash。,返回本节,October 27, 20

10、20,24,5.2.6 COFF文件中的符号,COFF文件中有一个符号表,用于存储程序中的符号信息。链接器对符号重定位时使用该表,调试工具也使用该表来提供符号调试。 外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况。,返回本节,October 27, 2020,25,5.3 常用汇编伪指令,返回首页,October 27, 2020,26,表5-2 常用的汇编伪指令,Octob

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

12、非0即为真)时汇编代码。 .elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编代码块。 .else 标志若.if条件为假时要汇编代码块。 .endif 标志条件块的结束,并终止该条件代码块。,October 27, 2020,29,3引用其他文件和初始化常数伪指令 .include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。 .copy 文件名 与.include类似。 .def 符号名 在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名 在其他文件中定义,可以在本文件中使用的符号。 .global 符号名 其作

13、用相当于.def、.ref效果之和。,October 27, 2020,30,.mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。 .float 数1,数2 指定的各浮点数连续放置到存储器中(从当前段指针开始)。 .word 数1,数2 指定的各数(十六进制)连续放置到存储器中。 .space n 以位为单位,空出n位存储空间。 .end 程序块结束。,October 27, 2020,31,4宏定义和宏调用 TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的

14、地方调用这条宏。 宏定义如下: Macname .macroparameter 1,parameter n .mexit .endm,返回本节,October 27, 2020,32,5.4 链接器命令文件的编写与使用,链接命令文件通过段定位控制命令,分配程序代码、数据运行存储空间。 链接命令文件有两个重要的指令:MEMORY和SECTIONS。,返回首页,October 27, 2020,33,5.4.1 MEMORY伪指令及其使用,MEMORY伪指令就是用来指定目标存储器的模型。 MEMORY指出目标系统中物理上存在的存储空间的范围,即可供程序使用的存储空间范围。在默认状态下,PAGE0代

15、表程序空间,PAGE1代表数据空间。,返回本节,October 27, 2020,34,MEMORY伪指令的一般语法为: SECTIONS name : property ,property ,property . name : property ,property ,property . name : property ,property ,property . ,October 27, 2020,35,5.4.2 SECTIONS伪指令及其使用,SECTIONS伪指令功能如下: 说明如何将输入段组合成输出段。 在可执行程序中定义输出段。 指定输出段在存储器中存放的位置。 允许对输出段重新命

16、名。,October 27, 2020,36,图5-5 例5-6中段的定位,返回本节,October 27, 2020,37,5.5 汇编语言程序编写方法,5.5.1 汇编语言源程序格式 5.5.2 汇编语言中的常数和字符串 5.5.3 汇编源程序中的符号 5.5.4 汇编源程序中的表达式,返回首页,October 27, 2020,38,MEMORY PAGE 0: EPROG: origin = 0 x1400, len = 0 x2c00 ;第0页程序空间开始地址0 x1400,空间长度0 x2c00 VECT: origin = 0 x0080, len = 0 x80 ;第0页中断向量开始地址0 x0080,空间长度0 x80 PAGE 1: REGS: origin = 0 x60, len = 0 x1c ;第1页寄存器空间开始地址0 x60,空间长度0 x1c IDATA: origin = 0 x80, len = 0 x1380 ;第1页数据空间开始地

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号