C6678十六进制转换工具Hex6x介绍_第1页
C6678十六进制转换工具Hex6x介绍_第2页
C6678十六进制转换工具Hex6x介绍_第3页
C6678十六进制转换工具Hex6x介绍_第4页
C6678十六进制转换工具Hex6x介绍_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C6678十六进制转换工具Hex6x介绍,主要内容,说明,为便于读者进一步研究Hex6x,本文附带了基于TMS320C6678的例程定时器timer;由于该例程引用了TI自带的目标文件库,所以在导入例程后,会由于引用地址不正确而产生报错,为解决这些问题,本文又附带了文档帮助解决上述问题;本文中使用的说明文件是基于此例程的。 同样,本文附带了hex6x转换工具, singlecore_boot_generator,附上本人的联系方式,方便交流:,1. Hex6x在文件格式转换中的作用,1. Hex6x在文件格式转换中的作用,将CCS生成的.out文件转化为Bootloader 可以“理解”的格式

2、是c66x 启动至关重要的一步。与以前的DSP 启动相比,c66x 系列的工具链更加复杂和多样化,参见文献2。如上图所示,经CCS生成的.out文件需要经过一系列格式转换工具的处理,转换为可以烧写到外部存储器并满足自启动要求的格式,在此过程中,Hex6x是最重要的转换环节。 C66以前的DSP文件格式转换,只需要Hex6x十六进制转换工具;C6678还需要在此基础上做后续处理,如上图所示。,1. Hex6x在文件格式转换中的作用,hex6x 文件和.rmd 文件配合使用,后者描述了输出控制、引导选项、存储器选项等内容(见调用Hex6x转换工具部分),经过处理后生成片上引导加载器加载程序所需的引

3、导表(见构建导引表部分)。 本文档围绕Hex6x转换工具,介绍相关文档格式及其转换过程:1)Hex6x输入的.out文件由CCS生成,在编译选项中设定文件格式为满足小端模式的ELF目标文件格式(该文件格式详细介绍参见文献3);Hex6x输入.rmd文件是指定了转换选项及转换文件名的命令文件(参见调用Hex6x转换工具部分);输出为引导表文件(见构建导引表部分)并以固定格式保存(参见ASCII-Hex目标格式部分) 。,虽然选项中提供了COFF输出格式选项,但是CCSv5提供的目标文件库只兼容ELF格式输出格式;如果选择COFF输出格式,连接器会报无法解析外部符号的错误。,2.调用Hex6x转换

4、工具,2.调用Hex6x转换工具,调用Hex6x工具有两种基本方法: 在命令行指定选项和文件名。下面的例子把文件fimware.out转换为TI-Tagged格式,产生两个输出文件firm.lsb和firm.msb. Hex6x t firmware o firm.lsb o firm.msb 在命令文件中指定选项和文件名。创建一个批处理文件,它存储Hex6x调用的包含命令行选项和文件名的命令文件。创建批处理文件spiboot_multi_1cores .bat,在批处理文件中调用Hex6x,并通过simple0.rmd命令文件调用命令行选项和命令文件名。,为便于重复使用以及体现展示效果,本文

5、档提供的例程singlecore_boot_generator采用第二种方法,即在批处理文件中调用Hex6x并指定命令文件。,2.调用Hex6x转换工具,为在命令行中调用Hex6x转换工具,输入: Hex6x option filename Hex6x 调用转换工具的命令 option 提供转换工程中的附加信息,通过这些选项指定转换后生成文件的格式、转换涉及存储器的宽度、控制引导加载选项等内容,若采用命令文件指定方式,则该选项在命令文件中设定(基本的转换工具选项列表见文献1.pp.631) Filename 指定被转换的.out文件,2.调用Hex6x转换工具,用命令文件调用hex6x:若计划

6、用同样的输入文件及选项调用hex6x或需要使用ROMS和SECTIONS伪指令定制转换过程,则需要采用这种方式。 首先新建批处理文件(例如例程中的spiboot_multi_1cores .bat ) 在批处理文件中输入调用工具Hex6x及命令文件,例如: hex6x simple0.rmd 新建命令文件simple0.rmd,在该命令文件中编辑输入需要转换的输入.out文件,转换选项(见前页),定制转换过程的ROMS及SECTIONS伪指令(若需要的话)。,2.调用Hex6x转换工具,命令文件格式如下所示:文件分三部分:1)输入文件列表;2)转换选项列表;3)ROMS和SECTIONS伪指令

7、。本例中未展示SECTIONS伪指令。,simple0.out /*输入文件*/ -a /*生成文件为ASCII-Hex格式*/ -boot /*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/ -e _c_int00 /*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/ -order L /*大小端选择 -order L 为小端;-order M 为大端*/ -map SPIBOOT0.map /*输出映像文件*/ ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, length = 0 x20000

8、00, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,2.调用Hex6x转换工具,simple0.out:由CCSv5链接产生的ELF可执行目标文件,在执行批处理文件之前,该文件必须存放在同一目录下; -a :指定经过Hex6x转换后的文件存储格式为ASCII-HEX格式,即将十六进制数由ASCII字符表示;显然,还可以指定输出文件格式为其他规定的格式(参见文献1.pp.647-649),simple0.out /*输入文件*/ -a /*生成文件为ASCII-Hex格式*/ -boot /*把所有初始化段转化为可导

9、引格式(代替SECTIONS伪指令)*/ -e _c_int00 /*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/ -order L /*大小端选择 -order L 为小端;-order M 为大端*/ -map SPIBOOT0.map /*输出映像文件*/ ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,2.调用Hex6x转换工具,-boot

10、: 该选项表示将.out文件中的所有初始化段写入到输出的引导表文件;同样可通过-bootsection 选项指定若干初始化段写入到输出的引导表文件,成为可引导段。未初始化段(.bss .usect)不可被写入到输出引导表文件。引导表参见构建引导表部分。,simple0.out /*输入文件*/ -a /*生成文件为ASCII-Hex格式*/ -boot /*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/ -e _c_int00 /*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/ -order L /*大小端选择 -orde

11、r L 为小端;-order M 为大端*/ -map SPIBOOT0.map /*输出映像文件*/ ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,2.调用Hex6x转换工具,-e _c_int00 :-e选项指定程序入口,即程序被加载之后从那里执行;该选项指定的值可以是具体的程序段地址,也可以是程序中的全局符号(该符号被保存在.out文件中,参见文献3,为ELF格式文件的ELF头的第五个成员变量)

12、 -order L: 设定输出文件数字字节排列方式:-order L为小端终结方式,即最低有效字节排列在最后;与通常所说的大小端模式相反,通常所说小端模式指最低有效字节排列在前(?,存疑),simple0.out /*输入文件*/ -a /*生成文件为ASCII-Hex格式*/ -boot /*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/ -e _c_int00 /*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/ -order L /*大小端选择 -order L 为小端终结;-order M 为大端终结*/ -map

13、SPIBOOT0.map /*输出映像文件*/ ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,2.调用Hex6x转换工具,-map SPIBOOT0.map 指定输出映像文件。映像文件指出存储器上每一个区域、它的参数、相关联的输出文件名,以及按地址分开的内容表。.map文件在第三部分进行描述。 注:由命令文件中的转换选项设定的引导表文件包含程序各初始化段及相关信息参数,该引导表文件数据将被片上引导加载

14、器(bootloader)加载到DSP上的内存空间(加载地址空间,不是运行地址空间)。该内存空间由ROMS伪指令描述。,simple0.out /*输入文件*/ -a /*生成文件为ASCII-Hex格式*/ -boot /*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/ -e _c_int00 /*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/ -order L /*大小端选择 -order L 为小端终结;-order M 为大端终结*/ -map SPIBOOT0.map /*输出映像文件*/ ROMS /*ROMS

15、伪指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,3. ROMS伪指令,3.ROMS伪指令,ROMS伪指令用一张地址区域参数表指定系统的物理存储器配置,即对DSP外部存放程序的存储器的描述。 ROMS伪指令与TMS320C6000连接器的MEMORY伪指令类似:二者定义的都是目标地址空间的存储器映射图。ROMS伪指令的一行定义一个指定的地址区域。,ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, le

16、ngth = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,3.ROMS伪指令,ROM1:表示存储器区域。该名称可以使18各字符; org: 表示存储器区域的起始地址,它可以是origin、org或者o;上图指定存储区域从实际物理地址0 x0880开始,该值没有从0开始,是因为存储器的开始不分要存放用于bootloader的其他参数数据; length: 指定存储区域的长度作为ROM器件的物理长度,它可以是length、len或者l;上图指定存储区域长度为0 x2000000(Bytes),即

17、32MB;因此存储器空间应该大于0 x0880B+0 x2000000B,ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,3.ROMS伪指令,memwidth : 指定DSP内部存储系统的物理宽度;通常存储系统在物理上与目标处理器的宽度相同,C6678为32bits处理器。 romwidth:转换后的文件将被存储到DSP外部的存储器ROM中,该选项指定外部存储系统的物理宽度,在本例中外部存储宽度为32b

18、its。 关于目标宽度、存储器宽度及ROM宽度的详细描述参见文献1.pp.632-634,在格式转换过程中,上述宽度将决定很多实现细节 ,文献同样进行了描述,在此不做进一步解释。 files指定了输出文件名。,ROMS /*ROMS伪指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定输出文件*/ ,3.ROMS伪指令,左图是转换过程中产生的映像文件(SPIBOOT0.map );右图为输入.out文件文件的段分布映射(timer.map)。,*

19、 TMS320C6x Hex Converter v7.2.1 * INPUT FILE NAME: OUTPUT FORMAT: ASCII-Hex BOOT LOADER PARAMETERS Table Address: 0 x0880, PAGE 0 Entry Point : 0 x808400 (_c_int00) OUTPUT TRANSLATION MAP - 00000880.0200087f Page=0 Memory Width=32 ROM Width=32 ROM1 - OUTPUT FILES: simple0.btbl b0.b31 CONTENTS: 00000

20、880.00009e37 BOOT TABLE .csl_vect : btad=00000880 dest=0080dc00 size=00000200 .text : btad=00000a8c dest=00800000 size=00008a80 .cinit : btad=00009514 dest=0080db18 size=000000c0 .const : btad=000095dc dest=0080ca80 size=000007a4 .switch : btad=00009d88 dest=0080da1c size=000000a4,SEGMENT ALLOCATION

21、 MAP run origin load origin length init length attrs members - - - - - - 00800000 00800000 00008a80 00008a80 r-x 00800000 00800000 00008a80 00008a80 r-x .text 00808a80 00808a80 00004000 00000000 rw- 00808a80 00808a80 00002000 00000000 rw- .stack 0080aa80 0080aa80 00002000 00000000 rw- .sysmem 0080ca

22、80 0080ca80 000007a4 000007a4 r- 0080ca80 0080ca80 000007a4 000007a4 r- .const 0080d224 0080d224 00000008 00000008 rw- 0080d224 0080d224 00000008 00000008 rw- .neardata 0080d230 0080d230 000003a8 00000000 rw- 0080d230 0080d230 000003a8 00000000 rw- .far 0080d5e0 0080d5e0 0000043c 0000031c rw- 0080d5

23、e0 0080d5e0 0000031c 0000031c rw- .fardata 0080d8fc 0080d8fc 00000120 00000000 rw- .cio 0080da1c 0080da1c 000000a4 000000a4 r- 0080da1c 0080da1c 000000a4 000000a4 r- .switch 0080dac0 0080dac0 00000058 00000058 rw- 0080dac0 0080dac0 00000058 00000058 rw- .bss 0080db18 0080db18 000000c0 000000c0 r- 00

24、80db18 0080db18 000000c0 000000c0 r- .cinit 0080dc00 0080dc00 00000200 00000200 r-x 0080dc00 0080dc00 00000200 00000200 r-x .csl_vect,3.ROMS伪指令,左图是转换过程中产生的映像文件(SPIBOOT0.map );右图为输入.out文件文件的段分布映射(timer.map)。,输出数据在存储器ROM上的映射结果,被转换到引导表的初始化段名;如上述介 绍,未初始化段不会被转换到引导表, 如上页右图棕色标记的各段,各段在外部存储器ROM上的起始地址; 首段起始地址

25、有ROMS伪指令给出, 随后各段地址依次累加,各段被加载到DSP内部存储系统后的存储地址,各段长度,* TMS320C6x Hex Converter v7.2.1 * INPUT FILE NAME: OUTPUT FORMAT: ASCII-Hex BOOT LOADER PARAMETERS Table Address: 0 x0880, PAGE 0 Entry Point : 0 x808400 (_c_int00) OUTPUT TRANSLATION MAP - 00000880.0200087f Page=0 Memory Width=32 ROM Width=32 ROM1

26、- OUTPUT FILES: simple0.btbl b0.b31 CONTENTS: 00000880.00009e37 BOOT TABLE .csl_vect : btad=00000880 dest=0080dc00 size=00000200 .text : btad=00000a8c dest=00800000 size=00008a80 .cinit : btad=00009514 dest=0080db18 size=000000c0 .const : btad=000095dc dest=0080ca80 size=000007a4 .switch : btad=0000

27、9d88 dest=0080da1c size=000000a4,4.构建导引表,4.构建导引表,引导表格式很简单。它由一个4B的头部记录位域,该位域指明在完成数据复制后,引导加载器应当跳转到的地址,即程序的入口地址。头部记录之后,每一个包含在引导表内的段由如下内容组成: 含有段尺寸的4B位域 含有复制的目的地址的4B位域 实际复制数据 可以输入多个段,在数据结尾处有4B的0,表示数据结束。,引导加载器的输入时引导表。引导表包含着记录,它只是引导加载器把包含在表内的数据块复制到指定的目的地址。Hex6x转换工具为加载器构建引导表。,4.构建导引表,引导加载器的输入时引导表。引导表包含着记录,它只是引导加载器把包含在表内的数据块复制到指定的目的地址。Hex6x转换工具为加载器构建引导表。,程序入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论