C6678十六进制转换工具Hex6x介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C6678十六进制转换工具Hex6x介绍主要内容Hex6x在文件格式转换中的作用1调用Hex6x转换工具2构建导引表4ASCII-Hex目标格式5ROMS伪指令3说明为便于读者进一步研究Hex6x,本文附带了基于TMS320C6678的例程定时器timer;由于该例程引用了TI自带的目标文件库,所以在导入例程后,会由于引用地址不正确而产生报错,为解决这些问题,本文又附带了文档帮助解决上述问题;本文中使用的说明文件是基于此例程的。同样,本文附带了hex6x转换工具,singlecore_boot_generator附上本人的联系方式,方便交流:1014771170@qq.com1.Hex6x在文件格式转换中的作用1.Hex6x在文件格式转换中的作用将CCS生成的.out文件转化为Bootloader可以“理解”的格式是c66x启动至关重要的一步。与以前的DSP启动相比,c66x系列的工具链更加复杂和多样化,参见文献[2]。如上图所示,经CCS生成的.out文件需要经过一系列格式转换工具的处理,转换为可以烧写到外部存储器并满足自启动要求的格式,在此过程中,Hex6x是最重要的转换环节。C66以前的DSP文件格式转换,只需要Hex6x十六进制转换工具;C6678还需要在此基础上做后续处理,如上图所示。1.Hex6x在文件格式转换中的作用hex6x文件和.rmd文件配合使用,后者描述了输出控制、引导选项、存储器选项等内容(见调用Hex6x转换工具部分),经过处理后生成片上引导加载器加载程序所需的引导表(见构建导引表部分)。本文档围绕Hex6x转换工具,介绍相关文档格式及其转换过程:1)Hex6x输入的.out文件由CCS生成,在编译选项中设定文件格式为满足小端模式的ELF目标文件格式(该文件格式详细介绍参见文献[3]);Hex6x输入.rmd文件是指定了转换选项及转换文件名的命令文件(参见调用Hex6x转换工具部分);输出为引导表文件(见构建导引表部分)并以固定格式保存(参见ASCII-Hex目标格式部分)。虽然选项中提供了COFF输出格式选项,但是CCSv5提供的目标文件库只兼容ELF格式输出格式;如果选择COFF输出格式,连接器会报无法解析外部符号的错误。2.调用Hex6x转换工具2.调用Hex6x转换工具调用Hex6x工具有两种基本方法:在命令行指定选项和文件名。下面的例子把文件fimware.out转换为TI-Tagged格式,产生两个输出文件firm.lsb和firm.msb.Hex6x–tfirmware–ofirm.lsb–ofirm.msb在命令文件中指定选项和文件名。创建一个批处理文件,它存储Hex6x调用的包含命令行选项和文件名的命令文件。创建批处理文件spiboot_multi_1cores.bat,在批处理文件中调用Hex6x,并通过simple0.rmd命令文件调用命令行选项和命令文件名。为便于重复使用以及体现展示效果,本文档提供的例程singlecore_boot_generator采用第二种方法,即在批处理文件中调用Hex6x并指定命令文件。2.调用Hex6x转换工具为在命令行中调用Hex6x转换工具,输入:Hex6x[option]filenameHex6x调用转换工具的命令[option]提供转换工程中的附加信息,通过这些选项指定转换后生成文件的格式、转换涉及存储器的宽度、控制引导加载选项等内容,若采用命令文件指定方式,则该选项在命令文件中设定(基本的转换工具选项列表见文献[1].pp.631)Filename指定被转换的.out文件2.调用Hex6x转换工具用命令文件调用hex6x:若计划用同样的输入文件及选项调用hex6x或需要使用ROMS和SECTIONS伪指令定制转换过程,则需要采用这种方式。首先新建批处理文件(例如例程中的spiboot_multi_1cores.bat)在批处理文件中输入调用工具Hex6x及命令文件,例如:hex6xsimple0.rmd新建命令文件simple0.rmd,在该命令文件中编辑输入需要转换的输入.out文件,转换选项(见前页),定制转换过程的ROMS及SECTIONS伪指令(若需要的话)。2.调用Hex6x转换工具命令文件格式如下所示:文件分三部分:1)输入文件列表;2)转换选项列表;3)ROMS和SECTIONS伪指令。本例中未展示SECTIONS伪指令。simple0.out/*输入文件*/-a/*生成文件为ASCII-Hex格式*/-boot/*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/-e_c_int00/*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/-orderL/*大小端选择-orderL为小端;-orderM为大端*/-mapSPIBOOT0.map/*输出映像文件*/ROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}2.调用Hex6x转换工具simple0.out:由CCSv5链接产生的ELF可执行目标文件,在执行批处理文件之前,该文件必须存放在同一目录下;-a:指定经过Hex6x转换后的文件存储格式为ASCII-HEX格式,即将十六进制数由ASCII字符表示;显然,还可以指定输出文件格式为其他规定的格式(参见文献[1].pp.647-649)simple0.out/*输入文件*/-a/*生成文件为ASCII-Hex格式*/-boot/*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/-e_c_int00/*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/-orderL/*大小端选择-orderL为小端;-orderM为大端*/-mapSPIBOOT0.map/*输出映像文件*/ROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}2.调用Hex6x转换工具-boot:该选项表示将.out文件中的所有初始化段写入到输出的引导表文件;同样可通过-bootsection选项指定若干初始化段写入到输出的引导表文件,成为可引导段。未初始化段(.bss.usect)不可被写入到输出引导表文件。引导表参见构建引导表部分。simple0.out/*输入文件*/-a/*生成文件为ASCII-Hex格式*/-boot/*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/-e_c_int00/*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/-orderL/*大小端选择-orderL为小端;-orderM为大端*/-mapSPIBOOT0.map/*输出映像文件*/ROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}2.调用Hex6x转换工具-e_c_int00:-e选项指定程序入口,即程序被加载之后从那里执行;该选项指定的值可以是具体的程序段地址,也可以是程序中的全局符号(该符号被保存在.out文件中,参见文献[3],为ELF格式文件的ELF头的第五个成员变量)-orderL:设定输出文件数字字节排列方式:-orderL为小端终结方式,即最低有效字节排列在最后;与通常所说的大小端模式相反,通常所说小端模式指最低有效字节排列在前(?,存疑)simple0.out/*输入文件*/-a/*生成文件为ASCII-Hex格式*/-boot/*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/-e_c_int00/*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/-orderL/*大小端选择-orderL为小端终结;-orderM为大端终结*/-mapSPIBOOT0.map/*输出映像文件*/ROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}2.调用Hex6x转换工具-mapSPIBOOT0.map指定输出映像文件。映像文件指出存储器上每一个区域、它的参数、相关联的输出文件名,以及按地址分开的内容表。.map文件在第三部分进行描述。注:由命令文件中的转换选项设定的引导表文件包含程序各初始化段及相关信息参数,该引导表文件数据将被片上引导加载器(bootloader)加载到DSP上的内存空间(加载地址空间,不是运行地址空间)。该内存空间由ROMS伪指令描述。simple0.out/*输入文件*/-a/*生成文件为ASCII-Hex格式*/-boot/*把所有初始化段转化为可导引格式(代替SECTIONS伪指令)*/-e_c_int00/*指定程序入口地址,在引导程序加载后从那里开始执行程序,该值可以是具体的地址,也可以是一个全局符号*/-orderL/*大小端选择-orderL为小端终结;-orderM为大端终结*/-mapSPIBOOT0.map/*输出映像文件*/ROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}3.ROMS伪指令3.ROMS伪指令ROMS伪指令用一张地址区域参数表指定系统的物理存储器配置,即对DSP外部存放程序的存储器的描述。ROMS伪指令与TMS320C6000连接器的MEMORY伪指令类似:二者定义的都是目标地址空间的存储器映射图。ROMS伪指令的一行定义一个指定的地址区域。ROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}3.ROMS伪指令ROM1:表示存储器区域。该名称可以使1~8各字符;org:表示存储器区域的起始地址,它可以是origin、org或者o;上图指定存储区域从实际物理地址0x0880开始,该值没有从0开始,是因为存储器的开始不分要存放用于bootloader的其他参数数据;length:指定存储区域的长度作为ROM器件的物理长度,它可以是length、len或者l;上图指定存储区域长度为0x2000000(Bytes),即32MB;因此存储器空间应该大于0x0880B+0x2000000BROMS/*ROMS伪指令*/{ROM1:org=0x0880,length=0x2000000,memwidth=32,romwidth=32files={simple0.btbl}/*指定输出文件*/}3.ROMS伪指令memwidth:指定DSP内部存储系统的物理宽度;通常存储系统在物理上与目标处理器的宽度相同,C6678为32bits处理器。romwidth:转换后的文件将被存储到DSP外部的存储器ROM中,该选项指定外部存储系统的物理宽度,在本例中外部存储宽度为32bits。关于目标宽度、存储器宽度及ROM宽度的详细描述参见文献[1].pp.632-634,在格式转换过程中,上述宽度将决定很多实现细节,文献同样进行了描述,在此不做进一步解释。files指定了输出文件名。ROMS/*ROMS伪指令*/{ROM1:org=0x0880,l

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功