tms320c54x软件开发

上传人:san****019 文档编号:70207963 上传时间:2019-01-16 格式:PPT 页数:77 大小:2MB
返回 下载 相关 举报
tms320c54x软件开发_第1页
第1页 / 共77页
tms320c54x软件开发_第2页
第2页 / 共77页
tms320c54x软件开发_第3页
第3页 / 共77页
tms320c54x软件开发_第4页
第4页 / 共77页
tms320c54x软件开发_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《tms320c54x软件开发》由会员分享,可在线阅读,更多相关《tms320c54x软件开发(77页珍藏版)》请在金锄头文库上搜索。

1、第5章 TMS320C54x软件开发,5.1 软件开发过程及开发工具 5.2 公共目标文件格式 5.3 常用汇编伪指令 5.4 链接器命令文件的编写与使用 5.5 汇编语言程序编写方法 5.6 TMS320C54x C语言编程 5.7 用C语言和汇编语言混合编程,5.1 软件开发过程及开发工具,1建立源程序:用C语言或汇编语言写源程序。 2用C编译器(Compiler)将C语言程序编译为汇编语言程序。 3用汇编器(Assembler)将汇编语言程序汇编成机器语言的目标程序。 4用连接器(Linker)将目标文件连接在一起,产生可执行模块。 5用调试工具对程序进行反复运行、测试和修改,以达到要求

2、。 6用十六进制转换公用程序(Hex Conversion Utility)将可执行目标程序转换成可烧写到EPROM的文件格式。,返回首页,图5-1 TMS320C54x DSP软件开发流程,归档器将汇编宏文件收入汇编宏库,归档器将目标文件收入目标文件库,C编译器将C程序编译为汇编语言程序,汇编器将汇编语言程序汇编为COFF格式目标程序,建库程序构建运行时支持库,汇编语言转换程序将代数形式程序转换成汇编语言程序,连接器将COFF目标文件、目标文件库、运行时支持库连接成可执行COFF文件,HEX转换器将可执行COFF文件转换成便于烧写EPROM的HEX或BIN格式文件,EPROM烧写器将程序写入

3、EPROM,上电时自动导入C54X运行,调试工具将C可执行COFF文件通过硬件仿真器下载到C54X中运行,或者下载到软件仿真器中运行。,绝对列表器将可执行COFF文件转换成列表文件,给出机器码、助记符、绝对地址等信息。,交叉引用列表器列出符号、符号的定义,以及引用情况,供排错使用。,表5-1 TMS320C54xV3.50版代码生成工具程序,返回本节,5.2 公共目标文件格式,5.2.1 COFF文件的基本单元段 5.2.2 汇编器对段的处理 5.2.3 链接器对段的处理 5.2.4 重新定位 5.2.5 程序装入 5.2.6 COFF文件中的符号,返回首页,5.2.1 COFF文件的基本单元

4、 段,汇编器和连接器建立的目标文件称为公共目标格式文件,即COFF(Common Object File Format)。COFF使模块化编程和管理变得方便和容易,因为用汇编语言编写程序时,是按段来考虑的,所以不同模块中的相同的段很容易汇编在一起。 段(sections)是COFF文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段。,图5-2 目标文件中的段与目标存储器的关系,返回本节,如图5-2所示为目标文件中的段与目标系统中存储器的关系。,5.2.2

5、汇编器对段的处理,1未初始化段 未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量。,段可以分为两大类:已初始化段和未初始化段。,未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为: .bss 符号,字数 符号 .usect “段名”,字数,.bss x,5,x,y . usect “myvar”,6,y,符号指向保留的存储单元的第一个字,2已初始化段 已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54X

6、存储器中。三个用于建立初始化段的伪指令句法分别为: .text 段起点 .data 段起点 .sect “段名”,段起点,汇编器在对程序进行汇编时,为程序中的每一个段安排了一个段程序计数器SPC。如:text段、data段、sect段、bss段、usect段分别有自己的段程序计数器。,段起点用来为段计数器定义一个起始值。如: .text 10;SPC=10,3命名段 命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。 例如:重复使用.text命令在目标文件中只建立一个.text段,链接后这个.text段作为一个单位分配到存储器中。如果想将一

7、部分程序放到与.text段不同的存储器中,可以使用命名段,将命名段放到与.text段不同的存储器中。 使用命名段可以将已初始化数据放到与.data段不同的存储器中,将未初始化的变量汇编到与bss段不同的存储器中。,产生命名段的伪指令为: 符号 .usect “段名”,字数 .sect “段名”,段起点,4子段 子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名 例:.sect “.text: _func” ;在text段内建立一个称之为 ; _func的子段。 子段也有两种,用.sect命令建立的是已

8、初始化段,用.usect命令建立的是未初始化段。,5段程序计数器(SPC) 汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。 开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。 如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。,例5-1 段命令应用举例: 2 * * * * * * * * * * * * * * * * * * * * * * * * * * 3 * Assemble an initialized table into .data

9、* 4 * * * * * * * * * * * * * * * * * * * * * * * * * * 5 0000 .data 6 0000 0011 coeff .word 011h,022h,033h 0001 0022 0002 0033 7 * * * * * * * * * * * * * * * * * * * * * * * * * * 8 * * Reserve space in .bss for a variable * * 9 * * * * * * * * * * * * * * * * * * * * * * * * * * 10 0000 .bss buff

10、er,10 11 * * * * * * * * * * * * * * * * * * * * * * * * * * 12 * * still in .data * * 13 * * * * * * * * * * * * * * * * * * * * * * * * * * 14 0003 0123 ptr .word 0123h,行号,段计数器,机器码,汇编指令,15 * * * * * * * * * * * * * * * * * * * * * * * * * * 16 * * Assemble code into the .text section * * 17 * * *

11、* * * * * * * * * * * * * * * * * * * * * * * 18 0000 .text 19 0000 100f add: LD 0Fh,A 20 0001 f010 aloop: SUB #1,A 0002 0001 21 0003 f842 BC aloop,AGEQ 0004 0001 22 * * * * * * * * * * * * * * * * * * * * * * * * * * 23 * * Another initialized table into .data * * 24 * * * * * * * * * * * * * * * *

12、 * * * * * * * * * * 25 0004 .data 26 0004 00aa ivals .word 0Aah,0BBh,0CCh 0005 00bb 0006 00cc,27 * * * * * * * * * * * * * * * * * * * * * * * * * * * * Define another section for more variables * * * * * * * * * * * * * * * * * * * * * * * * * * * * 30 0000 var2 .usect “newvars”,1 31 0001 inbuf .u

13、sect “newvars”,7 32 * * * * * * * * * * * * * * * * * * * * * * * * * * 33 * * Assemble more code into .text * * 34 * * * * * * * * * * * * * * * * * * * * * * * * * * 35 0005 .text 0005 110a mpy: LD 0Ah,B 0006 f166 mloop: MPY #0Ah,B 0007 000a 0008 f868 BC mloop,BNOV 0009 0006 * * * * * * * * * * *

14、* * * * * * * * * * * * * * * * * Define a named section for int. vectors * * * * * * * * * * * * * * * * * * * * * * * * * * * * 0000 .sect “vectors” 0000 0011 .word 011h,033h 0001 0033,图5-3 例5-1产生的目标代码,返回本节,在此例中,一共建立了5个段: .text 段内有10个字的程序 代码。 .data 段内有7个字的数据。 vectors是一个用.sect建立的自定义段,段内有2个字的已初始化数据。

15、 .bss 在存储器中为变量保 留10个存储单元。 newvars是一个用.usect命令 建立的自定义段,它 在存储器中为变量保 留8个存储单元。,5.2.3 链接器对段的处理,链接器对段的处理有两个功能。 首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。 其次,链接器为输出段选择存储器地址。,链接器有两个命令完成上述功能,即: MEMORY 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。 SECTIONS命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。,图5-4 链接器默认的存储器分配,返回本节,5.2.4 重新定位,1链接时重新定位 汇编器将每个段的起始地址处理为0,而所有需要重新定位的符号

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

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

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