




已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 tms320c54x软件开发,一、 软件开发过程 二、 汇编程序的编写方法 三、 coff和命令文件,软件开发过程及开发工具,1建立源程序 2c编译器(c compiler) 3汇编器(assembler) 4连接器(linker) 5调试工具 6十六进制转换公用程序(hex conversion utility),返回首页,图5-1 tms320c54x dsp软件开发流程,前进,汇编语言程序编写方法,汇编语言源程序格式 汇编语言中的常数和字符串 汇编源程序中的符号 汇编源程序中的表达式,返回首页,汇编语言源程序格式,助记符指令一般包含4个部分,其一般组成形式为: 标号: 助记符 操作数 ;注释 1标号区 所有汇编指令和大多数汇编伪指令前面都可以带有标号,标号可以长达32个字符,由az、az、09、_、和$符号组成,且第一个字符不能是数字,区分大小写。,2助记符区 助记符区不能从第一列开始,否则被认为是标号。 3操作数区 操作数区是一个操作数列表,可以是常数、符号或常数与符号构成的表达式。操作数间需用“,”号隔开。 4注释区 注释区可以从任何一列开始,可以包含ascii字符和空格。,汇编程序举例(1),; ; 64-bit addition ; ; x3 x2 x1 x0 ; + y3 y2 y1 y0 ; ; w3 w2 w1 w0 ; add64: dld x1,a ;a = x1 x0 dadd y1,a ;a = x1 x0 + y1 y0 dst a,w1 dld x3,a ;a = x3 x2 addc y2,a ;a = x3 x2 + 00 y2 + c add y3,16,a ;a = x3 x2 + y3 y2 + c dst a,w3 ret,程序举例(2),编制程序计算 y=aixi=a1*x1+a2*x2+a3*x3+a4*x4 的程序段。其中数据均为小数: a1=0.1 a2=0.2 a3=-0.3 a4=0.4 x1=0.8 x2=0.6 x3=-0.4 x4=-0.2,程序举例(2续),.bss x,4 .bss a,4 .bss y,1 .data table: .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10,.text start: ssbx frct stm #x,ar1 rpt #7 mvpd table,*ar1+ stm #x,ar2 stm #a,ar3 rptz a,#3 mac *ar2+,*ar3+,a sth a,y done: b done .end,常用汇编伪指令,返回首页,1段定义伪指令 为便于链接器将程序、数据分段定位于指定的(物理存在的)存储器空间,并将不同的obj文件链接起来。段的使用非常灵活,但常用以下约定: .text 此段存放程序代码。 .data 此段存放初始化了的数据。 .bss 此段存入未初始化的变量。 .sect 名称 定义一个有名段,放初始化了的数据或程序代码。,2条件汇编伪指令 .if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。 .if expression 标志条件块的开始,仅当条件为真(expression的值非0即为真)时汇编代码。 .elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编代码块。 .else 标志若.if条件为假时要汇编代码块。 .endif 标志条件块的结束,并终止该条件代码块。,3引用其他文件和初始化常数伪指令 .include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。 .copy 文件名 与.include类似。 .def 符号名 在当前文件中定义一个符号,可以被其他文件使用。 .ref 符号名 在其他文件中定义,可以在本文件中使用的符号。 .global 符号名 其作用相当于.def、.ref效果之和。,.mmregs 定义存储器映射寄存器的符号名,这样就可以用ar0、pmst等助记符替换实际的存储器地址。 .float 数1,数2 指定的各浮点数连续放置到存储器中(从当前段指针开始)。 .word 数1,数2 指定的各数(十六进制)连续放置到存储器中。 .space n 以位为单位,空出n位存储空间。 .end 程序块结束。,返回,汇编语言中的常数和字符串,表5-3 coff常数与字符串,返回本节,表5-1 tms320c54xv3.50版代码生成工具程序,返回本节,3.3 汇编语言程序的编辑、汇编和链接过程,返回,编辑 汇编 asm500 %1 s l x 链接 link500 %1.cmd 调试 利用软件仿真器(simulator)进行调试 利用硬件仿真器(emulator)进行调试 利用评价模块进行调试 固化用户程序,3.4 coff的一般概念,coff文件的基本单元段 汇编器对段的处理 链接器对段的处理 重新定位 程序装入 coff文件中的符号,返回首页,coff文件的基本单元段,段(sections)是coff文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,coff目标文件包含3个缺省的段:text段、data段、bss段。 段可以分为两大类,即已初始化段和未初始化段。如图5-2所示为目标文件中的段与目标系统中存储器的关系。,图5-2 目标文件中的段与目标存储器的关系,返回本节,汇编器对段的处理,1未初始化段 未初始化段主要用来在存储器中保留空间,通常将它们定位到ram中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量。未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为: .bss 符号,字数 符号 .usect “段名”,字数,2已初始化段 已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到tms320c54x存储器中。三个用于建立初始化段的伪指令句法分别为: .text 段起点 .data 段起点 .sect “段名”,段起点,3命名段 命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。 data段不同的存储器中,将未初始化的变量汇编到与bss段不同的存储器中。产生命名段的伪指令为: 符号 .usect “段名”,字数 .sect “段名”,段起点,4子段 子段(subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名 子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。,5段程序计数器(spc) 汇编器为每个段安排一个独立的程序计数器,即段程序计数器(spc)。spc表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个spc置0,当汇编器将程序代码或数据加到一个段内时,相应的spc增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的spc在先前的基础上继续增加。,图5-3 例5-1产生的目标代码,返回本节,链接器对段的处理,链接器对段的处理有两个功能。首先,它将汇编器产生的coff目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的coff输出模块中建立各个输出段。其次,链接器为输出段选择存储器地址。,链接器有两个命令完成上述功能,即: memory 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。 sections命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器sections命令指定子段。,图5-4 链接器默认的存储器分配,返回本节,重新定位,1链接时重新定位 将各个段定位到存储器中,每个段都从合适的地址开始。 将符号值调整到相对于新的段地址的数值。 调整对重新定位后符号的引用。,2运行时重新定位 将代码装入存储器的一个地方,而运行在另一个地方。利用sections命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的rom中,但希望在较快的ram中运行。 链接器提供了一个简单的处理该问题的方法。利用sections命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址。,返回本节,程序装入,(1)硬件仿真器和ccs集成开发环境,具有内部的装入器,调用装入器的load命令即可装入可执行程序。 (2)将代码固化在片外存储器中,采用hex转换工具(hex conversion utility),例如hex500将可执行的coff目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入eprom/flash。,返回本节,coff文件中的符号,coff文件中有一个符号表,用于存储程序中的符号信息。链接器对符号重定位时使用该表,调试工具也使用该表来提供符号调试。 外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况。,返回本节,表5-2 常用的汇编伪指令,3.5 汇编,汇编器的功能: 将汇编语言源程序汇编成一个可以重新定位的目标文件(.obj文件) 如果需要,可以生成一个列表文件(.lst文件) 将程序代码分成若干个段,每个段的目标代码都有一个spc(段程序计数器)管理。 定义和引用全局符号,需要的话还可以在列表文件后面附加一张交叉引用表。 对条件程序块进行汇编。 支持宏功能,允许定义宏命令,运行汇编程序 asm500 input fileobject filelisting file-options asm500-运行汇编程序asm500.exe的命令 input file汇编语言源程序名。 object file由汇编程序建立的目标文件名。 listing file汇编程序建立的列表文件名。 options选项 asm500 1 -l -s -x,field 1:源程序语句的行号,用十进制数表示。 field 2:段程序计数器(spc),用十六进制表示。 field 3:目标代码,用十六进制表示。 field 4:源程序语句。这一部分包含被汇编器搜索到的源程序的 所有字符。 交叉引用清单 lable此栏列出了汇编时定义和引用的每一个符号。 value此栏列出了一个赋给符号的4位十六进制数值,或者是说明符号属性的字符或名称。 definitiondefn栏列出了定义符号的语句编号。 referenceref栏列出了引用此符号的语句的行号。,交叉引用清单,对各种段进行定义的命令 对常数(数据和存储器)进行初始化的命令 调整spc(段寄存器)的指令 对输出列表文件格式化的命令 引用其他文件的命令 控制条件汇编的命令 在汇编时定义符号的命令 执行其他功能的命令,汇编命令,4宏定义和宏调用 tms320c54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。 宏定义如下: macname .macroparameter 1,parameter n .mexit .endm,返回本节,macname .macroparameter1,parameter n model statements or macro directioves .mexit .endm macname-宏指令名,必须放在源程序语句的标号位置 macro作为宏定义第一行的记号,必须放在助记符操作码位置 parameters是任选的替代符号,就像宏指令的操作数。 model statements这些都是每次宏调用时要执行的指令或汇编命令 macro directives用于控制宏指令展开的命令 .mexit相当于一条goto .endm语句. .endm结束宏定义,宏调用的格式,label: macname parameter 1,parameter n,3.6 链 接,在链接过程中,链接器将各个目标文件合并起来,并完 成以下工作: 将各个段配置到目标系统的存储器中。 对各个符号和段进行重新定位,并给它们指定一个最终的地址 解决输入文件之间未定义的外部引用。,运行链接程序,键入命令:lnk500 此时链接器就会提示: command files: (要求键入一个或多个命令文件) object files.obj: (要求键入一个或多个需要链接的目标文件名。缺 省扩展名为.obj,文件名之间要空格或逗号分开) output file.out: (要求键入一个输出文件名,也就是链接器生成的 输出模块名。) options: (这是附加的链接器选项,选项前应加一短划。) 键入命令:lnk500 file1.obj file2.obj -o link.out 键入命令:lnk500 linker.cmd,链接器选项,-a 生成一个绝对地址的、可执行的输出模块。 -ar 生成一封可重新定位、可执行的目标模块。 -e global_symbol 定义一个全局符号,这个符号所对应的程序存储器地址,就是使用开发工具调试这个链接后的可执行文件时,程序开始执行时的地址(称为入口地址)。 -f 对输出模块各段之间的空单元设置一个16位数值(fill_value)。 -i dir 更改搜索文档库算法,先到.dir(目录)中搜索。 -l filename 命名一个文档库文件作为链接器的输入文件。 -m filename 生成一个.map映像文件,filename是映像文件的文件名。 -o filename 对可执行输出模块命名。 -r 生成一个可重新定位的输出模块。,链接器命令文件,a.obj b.obj /*input filename */ -o prog.out /*option */ -m prog.map /*option */ memory /* memory directive */ page0: rom: orgin=1000h, length=0100h page1: ram: orgin=0100h, length=0100h sections /* sections directive */ .text : rom .data: rom .bss: ram ,“memory”命令的格式,memory page 0 : name 1 (attr) : origin = constant , length = constant; page n : name n (attr) : origin = constant , length = constant; ,memory伪指令就是用来指定目标存储器的模型。 page 对一个存储空间加以标记,每个page代表一 个完全独立 的地址空间。 name 对一个存储器区间取名。 attr 这是一个任选项,为命名去规定14个属性。 origin规定一个存储区的起始地址。 length规定一个存储区的长度。 fill 为没有定位输出段的存储器单元填充一个数。,“memory”命令举例,memory page 0: rom: origin = c00h, length = 1000h page 1: scratch: origin = 60h, length = 20h onchip: origin = 80h, length = 1000h ,“memory”命令举例,sections命令的任务如下: 说明如何将输入段组合乘输出段 在可执行程序中定义输出段 规定输出段在存储器中的存放位置 允许重新命名输出段 一般句法: sections name:property,property,property, name:property,property,property, name:property,property,property, ,sections 命令,“sections”命令举例,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 ,“sections”命令举例,the .bss section combines the .bss sections from file1.obj and file2.obj. the .data section combines the .data sections from file1.obj and file2.obj. the linker will place it anywhere there is space for it (in ram in this illustration) and align it to a 16-word boundary.,“sections”命令举例,the .text section combines the .text sections from file1.obj and file2.obj. the linker combines all sections named .text into this section. the application must relocate the section to run at 0800h. the .const section combines the .const sections from file1.obj and file2.obj. the .vectors section is composed of the .intvec1 section from t1.obj and the .intvec2 section from t2.obj.,sections exprog: load edata1 page 1 ,run=eprogflash page 0 .vectors: vectors page 0 .trcinit: daram page 0 .gblinit: daram page 0 .bios: daram page 0 frt: daram page 0 .text: daram page 0 .cinit: daram page 0 .pinit: daram page 0 .sysinit: daram page 0 .data: daram page 0 .const: daram page 0 .switch: daram page 0 on_chip_prog: daram page 0 onchipram: daram page 0 .sysregs: biosregs page 1 .bss: edata2 page 1 .far: edata2 page 1 .sysmem: edata2 page 1 .cio: edata2 page 1 .mem$obj: edata2 page 1 .sysheap: edata2 page 1 .stack: stackram page 1 ,实际应用(13/13),图5-5 例5-6中段的定位,返回本节,汇编源程序中的符号,1标号 2局部标号 3符号常数 4先定义的符号常数 5替代符号,表5-4 可以用在表达式中的运算符,表5-5 带有绝对符号、可重定位符号的表达式,返回本节,汇编源程序中的表达式,表达式可以是常数、符号或由算术运算符结合的常数和符号。表达式值的有效范围为-3276832767。 1运算符(表5-4 所示) 2合格的表达式(表5-5所示 ),返回本节,tms320c54x c语言编程,存储器模式 寄存器规则 函数调用规则 中断处理 表达式分析,返回首页,存储器模式,1段 c54x将存储器处理为程序存储器和数据存储器两个线性块。程序存储器包含可执行代码;数据存储器主要包含外部变量、静态变量和系统堆栈。编译器的任务是产生可重定位的代码,允许链接器将代码和数据定位进合适的存储空间。c编译器对c语言编译后除了生成3个基本段,即.text、.data、.bss外,还生成.cinit、.const、.stack、.sysmem段。,2c/c+系统堆栈 .stack不同于dsp汇编指令定义的堆栈。dsp汇编程序中要将堆栈指针sp指向一块ram,用于保存中断、调用时的返回地址,存放push指令的压栈内容。 .stack定义的系统堆栈实现的功能是保护函数的返回地址,分配局部变量,在调用函数时用于传递参数,保护临时结果。 .stack定义的段大小(堆栈大小)可用链接器选项-stack size设定,链接器还产生一个全局符号_ _stack_size,并赋给它等于堆栈长度的值,以字为单位,缺省值为1k。,3存储器分配 (1)运行时间支持函数。 (2)动态存储器分配。 (3)静态和全局变量的存储器分配。 (4)位域/结构的对准。,返回本节,寄存器规则,寄存器规则明确了编译器如何使用寄存器以及在函数调用过程中如何保护寄存器。 (1)辅助寄存器 (2)堆栈指针sp (3)arp (4)在默认情况下,编译器总是假定st1中的ovm在硬件复位时被清0。若在汇编代码中对ovm置位为1,返回到c环境时必须复位。 (5)寄存器变量,返回本节,函数调用规则,(1)局部帧的产生 (2)参数传递 (3)函数的返回,返回本节,中断处理,(1)中断的使能和屏蔽必须由程序员自己来设置。 (2)中断程序没有参数传递,即使说明,也会被忽略 (3)中断处理程序不能被正常的c程序调用。 (4)为了使中断程序与中断一致,在相应的中断矢量中必须放置一条转移指令,可以用.sect汇编伪指令建立一个简单的跳转指令表来完成此项功能。,(5)在汇编语言中,注意在符号名前面加上一个下划线,例如c_int00记为_ c_int00。 (6)中断程序使用的所有寄存器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 睡眠质量提升与养生保健技巧考核试卷
- 灯具国际贸易风险与应对策略考核试卷
- 锌锰电池的电极材料在长期储存中的性能保持考核试卷
- 银发族养生保健特殊关注考核试卷
- 猫狗常见疾病防治指南
- 冬季小学生疾病预防指南
- 食源性疾病主动监测体系构建与应用
- Orchinol-生命科学试剂-MCE
- 超神数学-高考数学总复习拔高篇(二轮)专题19平面向量中的取值范围问题(含答案或解析)
- 2025年流媒体平台竞争格局下的内容创新实践与案例分析
- 2025年道教人员考试试题及答案
- 兽药GMP培训课件
- 2022-2023学年浙江省温州市永嘉县人教PEP版四年级下册期末测试英语试卷
- 《现代色谱分析HPL》课件
- 2024年设备监理师考试题库及答案(历年真题)
- 三病母婴传播及阻断
- 初中常见副词英语单选题100道及答案解析
- 安徽农业大学《中级财务会计》2022-2023学年第一学期期末试卷
- HXD1C型机车转向架培训教材(20091008)资料
- 工业自动化设备维护保养操作手册
- 针灸师招聘面试题与参考回答2025年
评论
0/150
提交评论