DSP第三章
- 格式:pdf
- 大小:77.36 KB
- 文档页数:29
第三章 DSP芯片开发工具的 特点及应用§3.1 DSP开发环境 §3.2 通用目标文件格式COFF §3.3 编程工具特点及应用 §3.4 调试工具的特点及应用XCHL《DSP原理及应用》讲稿1宏源程序 文件C语音 源文件 汇编语音 源文件§3.1 DSP 开发环境汇 编 语 音 开 发 流 程归档器 宏文件库C编译器 汇编语音 源文件 建库应 用程序 实时 支持库 Computer 调试工具汇编器归档器COFF通用 目标文件目标 文件库 十六进制 转换程序 EPROM中 的十六进制 代码程序 绝对 列表器链接器 可执行的单个 COFF文件交叉引用 TMS320C2XX 芯片 列表器 返回本章首页2XCHL《DSP原理及应用》讲稿§3.2 通用目标文件格式COFFCOFF文件格式是基于段(section)的概念建立的,即程序被分 解成各种段的组合体:如文本段、数据段等。
这种文件格式便于 实现模块化程序设计,即程序员设计时只需基于代码段和数据段 等概念进行,不需关注每条命令或每个数据的具体目标地址。
至 于它们的最终将处于存储器的哪个位置,将由链接器来安排。
• • • • • •段的概念及分类 段的创立 段的组合及其在存储器中的映象 程序重定位 COFF文件内的符号 COFF文件的装载•《DSP原理及应用》讲稿返回本章首页XCHL3段的概念及分类• 段(section)是目标文件的最小单位。
即指最终在存储器中占据连续空间的一段代码或数据。
• COFF文件中可包含如下几种段:– 文本段( .text section):通常包含可执行代码 – 数据段 (.data setion):通常包含已初始化数据 – 变量段 (.bss section):通常用来为未初始化变量保留存储 空间 – 命名段(.named section):是用户自定义段 前三种是DSP系统的基本缺省段。
• 分类– 已初始化段(initialized section):如.text 和. data段 – 未初始化段(unintialized section):存储器中保留的用来存 放未初始化数据或变量的空间 – 返回本节首页XCHL 《DSP原理及应用》讲稿 4段的创立• 汇编器有六个伪指令来创立段。
– .bss – .usect 创立未初始化段 – .text – .data 创立初始化段 – .sect – .asect 【注】如用户未使用任何伪指令,则汇编器将把所以 内容汇编入.text段。
• 未初始化段的创立 • 初始化段的创立 • 例题•XCHL 《DSP原理及应用》讲稿返回本节首页5未初始化段的创立 • 未初始化短的作用是在存储器(一般是RAM型)中保 留部分空间,以便程序运行时创建和存储变量。
• 一般用两条伪指令.bss和.usect创立未初始化段。
• .bss:– 功能:在.bss型段内保留空间 – 语法格式: .bss 符号,字数 – 符号指向.bss命令保留的第一个字,通常用第一个未初始化变 量的变量名来表示。
字数指明保留空间的大小。
– 例:.bss varl, 1• .usect:– 语法格式:符号 .usect “段名”,字数 – 功能:在指定段内为由符号指向的变量表保留一定字数的空 间,该段必须是用户自定义的。
– 例:inbuf .usect newvars, 7 – 返回次节首页XCHL 《DSP原理及应用》讲稿 6初始化段的创立 • 初始化段的作用是包含可执行代码或初始化数据。
• 有四条伪指令可创立初始化段:.text,.data,.sect 和.asect。
• .text:创建存放可执行代码的.text段例: add: aloop: .text LAC 0FH SBLK #1 BLEZ aloop SACL varl , 0 .data .word 011h, 022h, 033h .sect “section name” 返回次节首页7• .data:创建存放已初始化数据的.data段例: coeff 例: 例:• .sect:创建具可重定位地址的命名段 • .asect:创建具绝对地址的命名段XCHL.asect “section name”, address 《DSP原理及应用》讲稿例题行号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17XCHLSPC 0000 0000 0001 0002 0000 0001 0003 0000 0000 0001 0002 0003 0004 0005 0004 0004 0005目标代码 0011 0022 0033 coeff源程序 .data .word 011h, 022h, 033h0123 200f d003 0001 f280 0001 6000 00aa 00bbptr add: aloop:.bss varl, 1 .bss buffer, 10 .word 0123h .text LAC 0Fh SBLK #1 BLEZ aloop SACL varl, 0 .data .word 0AAh, 0BBh8ivals《DSP原理及应用》讲稿行号 18 19 20 21SPC 0000 0001 0006 0006目标代码 var2 inbuf ccff源程序 .usect newvars, 1 .usect newvars, 7 .text ADD #0FFh• 解释 – 关于段程序计数器SPC汇编器在对源程序分段汇编时,为每种类型的段分配一个 SPC,用来指示各段的内容顺序。
SPC总是指向本段的当前 值。
– 伪指令效用期• 长效应伪指令:如.text,.data,.sect和.asect,汇编器遇到 该类伪指令时,则停止对当前段的汇编,开始对该指令指 定段的汇编,直至遇到另一个长效应伪指令为止。
• 短效应伪指令:如.bss和.usect,汇编器遇到该类伪指令 时,则暂停对当前段的汇编,开始对该指令指定段的汇 编,然后继续进行对上一个长效应伪指令的汇编。
返回次节首页XCHL 《DSP原理及应用》讲稿 9段的组合及其在存储器中的映象汇编器将源文件的段类别识别出来,由链接器将各种段组合起 来,形成可执行的COFF输出模块。
同时,链接器还将为各输出段 选择存储器地址。
• 链接器用两条伪指令完成上述功能: – MEMORY: 定义目标系统的存储器映象,可以给 它们命名,规定起始地址和长度 – SECTIONS:指定怎样组合各输入段以及将各输出 段存放在存储器的哪个位置 • 链接器定位段的两种方法 – 缺省的定位算法 – 用MEMORY和SECTIONS 命令分配存储器返回本节首页XCHL 《DSP原理及应用》讲稿 10缺省的定位算法返回本次节首页•存储器分配原则–读目标文件以确定正确的目标处理器,即确定当前处理器的具体型号–根据目标处理器确定存储器的可用情况,以TMS320C25为例:•程序存储器:外部1000h~0FEFFh•数据存储器:片内0300h~03FFh片外0400h~0FEFFh–将.text段定位到字1000H开始的程序存储器中;–将.data段定位到紧接着.text段后的程序存储器中;–根据遇到的已初始化命名段次序先后将它们依次定位在.data段之后;–将.bss段定位到自3000h开始的数据存储器中;–将未初始化命名段依次定位到.bss段之后的数据存储器中。
XCHL《DSP原理及应用》讲稿11用MEMORY和SECTIONS 命令分配存储器•例:MEMORY{PAGE 0: VECS:origin=0h, length=020hCODE: origin=020h,length=0F90hPAGE 1: RAMB2:origin=060h, length=020hRAMB0:origin=200h, length=100hRAMB1:origin=300h, length=100h}SECTIONS{vectors:>0000h.text:>CODE.data:>RAMB2.bss:>RAMB0newvars:>RAMB1}XCHL《DSP原理及应用》讲稿13程序重定位(Relocation)•概念–汇编器在汇编源程序时,给各个段分配一个SPC,且每个段的SPC 均从0开始。
此时,源程序中的标号(如前例中的aloop)值取该段在本语句的SPC值(aloop=0001H),即相当该段起始位置的偏移量。
链接器在给各个段分配存储器空间的时候,不能保证每个段都从0000H单元开始,故源程序中的标号需随各段在存储器中的具体位置重新赋值,此即重定位。
•实现方法重定位的工作通常又汇编器和链接器共同完成。
–汇编器为段内所以需重定位的标号创建一个重定位入口表,表中提供各个符号的相应重定位入口信息(如其定义行的SPC值,重定位地址的计算方法等)。
此表在汇编结束各个段的COFF中提供。
–链接器按如下步骤完成重定位:•把段定位到存储器中以确定各段的起始位置;•计算各个需重定位符号在存储器中的具体位置;•修改引用符号处的符号值以便引用。
XCHL《DSP原理及应用》讲稿15•运行时的重定位返回本节首页–有时希望程序目标码存储和运行使用不同的存储器空间,如保存在ROM中,运行却希望在SRAM中完成,此时需对程序进行重定位。
–运行时的重定位也是由链接器完成。
即使用SECTIONS命令对段进行二次分配。
如:.text : load=CODE run=RAMB0其中,load和run分别是用于装载地址和运行地址的关键字。
•举例SPC目标代码重定位后目标码源程序.ref X 0000 0200h.text0000FF80FF80 B X0001000001000002D001D001LALK Y0003000402040004CEIF CEIF Y:IDLE 【注释】.ref X表明标号X是在.text段外定义的标号,汇编后其值取0000。
XCHL《DSP原理及应用》讲稿16COFF文件内的符号由汇编器和链接器创建的COFF文件中包含一个符号表,专门存储程序中所用到的符号信息。
•内部符号和外部符号–内部符号:本段内定义,本段内使用。
重定位由链接器借助SPC完成,不列入符号表中。
–外部符号:在一个模块中定义,在另一个模块中使用,汇编时需列入符号表,以便帮助链接器重定位该符号。
•外部符号的声明–.global:全局符号,所有模块都可使用,可能时参考符号和定义符号。
–.ref:参考符号,在其它模块中定义,在本模块中只引用。