C6678十六進(jìn)制轉(zhuǎn)換工具Hex6x介紹_第1頁(yè)
C6678十六進(jìn)制轉(zhuǎn)換工具Hex6x介紹_第2頁(yè)
C6678十六進(jìn)制轉(zhuǎn)換工具Hex6x介紹_第3頁(yè)
C6678十六進(jìn)制轉(zhuǎn)換工具Hex6x介紹_第4頁(yè)
C6678十六進(jìn)制轉(zhuǎn)換工具Hex6x介紹_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C6678十六進(jìn)制轉(zhuǎn)換工具Hex6x介紹,主要內(nèi)容,說(shuō)明,為便于讀者進(jìn)一步研究Hex6x,本文附帶了基于TMS320C6678的例程定時(shí)器timer;由于該例程引用了TI自帶的目標(biāo)文件庫(kù),所以在導(dǎo)入例程后,會(huì)由于引用地址不正確而產(chǎn)生報(bào)錯(cuò),為解決這些問(wèn)題,本文又附帶了文檔幫助解決上述問(wèn)題;本文中使用的說(shuō)明文件是基于此例程的。 同樣,本文附帶了hex6x轉(zhuǎn)換工具, singlecore_boot_generator,附上本人的聯(lián)系方式,方便交流:,1. Hex6x在文件格式轉(zhuǎn)換中的作用,1. Hex6x在文件格式轉(zhuǎn)換中的作用,將CCS生成的.out文件轉(zhuǎn)化為Bootloader 可以“理解”的格式

2、是c66x 啟動(dòng)至關(guān)重要的一步。與以前的DSP 啟動(dòng)相比,c66x 系列的工具鏈更加復(fù)雜和多樣化,參見(jiàn)文獻(xiàn)2。如上圖所示,經(jīng)CCS生成的.out文件需要經(jīng)過(guò)一系列格式轉(zhuǎn)換工具的處理,轉(zhuǎn)換為可以燒寫到外部存儲(chǔ)器并滿足自啟動(dòng)要求的格式,在此過(guò)程中,Hex6x是最重要的轉(zhuǎn)換環(huán)節(jié)。 C66以前的DSP文件格式轉(zhuǎn)換,只需要Hex6x十六進(jìn)制轉(zhuǎn)換工具;C6678還需要在此基礎(chǔ)上做后續(xù)處理,如上圖所示。,1. Hex6x在文件格式轉(zhuǎn)換中的作用,hex6x 文件和.rmd 文件配合使用,后者描述了輸出控制、引導(dǎo)選項(xiàng)、存儲(chǔ)器選項(xiàng)等內(nèi)容(見(jiàn)調(diào)用Hex6x轉(zhuǎn)換工具部分),經(jīng)過(guò)處理后生成片上引導(dǎo)加載器加載程序所需的引

3、導(dǎo)表(見(jiàn)構(gòu)建導(dǎo)引表部分)。 本文檔圍繞Hex6x轉(zhuǎn)換工具,介紹相關(guān)文檔格式及其轉(zhuǎn)換過(guò)程:1)Hex6x輸入的.out文件由CCS生成,在編譯選項(xiàng)中設(shè)定文件格式為滿足小端模式的ELF目標(biāo)文件格式(該文件格式詳細(xì)介紹參見(jiàn)文獻(xiàn)3);Hex6x輸入.rmd文件是指定了轉(zhuǎn)換選項(xiàng)及轉(zhuǎn)換文件名的命令文件(參見(jiàn)調(diào)用Hex6x轉(zhuǎn)換工具部分);輸出為引導(dǎo)表文件(見(jiàn)構(gòu)建導(dǎo)引表部分)并以固定格式保存(參見(jiàn)ASCII-Hex目標(biāo)格式部分) 。,雖然選項(xiàng)中提供了COFF輸出格式選項(xiàng),但是CCSv5提供的目標(biāo)文件庫(kù)只兼容ELF格式輸出格式;如果選擇COFF輸出格式,連接器會(huì)報(bào)無(wú)法解析外部符號(hào)的錯(cuò)誤。,2.調(diào)用Hex6x轉(zhuǎn)換

4、工具,2.調(diào)用Hex6x轉(zhuǎn)換工具,調(diào)用Hex6x工具有兩種基本方法: 在命令行指定選項(xiàng)和文件名。下面的例子把文件fimware.out轉(zhuǎn)換為TI-Tagged格式,產(chǎn)生兩個(gè)輸出文件firm.lsb和firm.msb. Hex6x t firmware o firm.lsb o firm.msb 在命令文件中指定選項(xiàng)和文件名。創(chuàng)建一個(gè)批處理文件,它存儲(chǔ)Hex6x調(diào)用的包含命令行選項(xiàng)和文件名的命令文件。創(chuàng)建批處理文件spiboot_multi_1cores .bat,在批處理文件中調(diào)用Hex6x,并通過(guò)simple0.rmd命令文件調(diào)用命令行選項(xiàng)和命令文件名。,為便于重復(fù)使用以及體現(xiàn)展示效果,本文

5、檔提供的例程singlecore_boot_generator采用第二種方法,即在批處理文件中調(diào)用Hex6x并指定命令文件。,2.調(diào)用Hex6x轉(zhuǎn)換工具,為在命令行中調(diào)用Hex6x轉(zhuǎn)換工具,輸入: Hex6x option filename Hex6x 調(diào)用轉(zhuǎn)換工具的命令 option 提供轉(zhuǎn)換工程中的附加信息,通過(guò)這些選項(xiàng)指定轉(zhuǎn)換后生成文件的格式、轉(zhuǎn)換涉及存儲(chǔ)器的寬度、控制引導(dǎo)加載選項(xiàng)等內(nèi)容,若采用命令文件指定方式,則該選項(xiàng)在命令文件中設(shè)定(基本的轉(zhuǎn)換工具選項(xiàng)列表見(jiàn)文獻(xiàn)1.pp.631) Filename 指定被轉(zhuǎn)換的.out文件,2.調(diào)用Hex6x轉(zhuǎn)換工具,用命令文件調(diào)用hex6x:若計(jì)劃

6、用同樣的輸入文件及選項(xiàng)調(diào)用hex6x或需要使用ROMS和SECTIONS偽指令定制轉(zhuǎn)換過(guò)程,則需要采用這種方式。 首先新建批處理文件(例如例程中的spiboot_multi_1cores .bat ) 在批處理文件中輸入調(diào)用工具Hex6x及命令文件,例如: hex6x simple0.rmd 新建命令文件simple0.rmd,在該命令文件中編輯輸入需要轉(zhuǎn)換的輸入.out文件,轉(zhuǎn)換選項(xiàng)(見(jiàn)前頁(yè)),定制轉(zhuǎn)換過(guò)程的ROMS及SECTIONS偽指令(若需要的話)。,2.調(diào)用Hex6x轉(zhuǎn)換工具,命令文件格式如下所示:文件分三部分:1)輸入文件列表;2)轉(zhuǎn)換選項(xiàng)列表;3)ROMS和SECTIONS偽指令

7、。本例中未展示SECTIONS偽指令。,simple0.out /*輸入文件*/ -a /*生成文件為ASCII-Hex格式*/ -boot /*把所有初始化段轉(zhuǎn)化為可導(dǎo)引格式(代替SECTIONS偽指令)*/ -e _c_int00 /*指定程序入口地址,在引導(dǎo)程序加載后從那里開始執(zhí)行程序,該值可以是具體的地址,也可以是一個(gè)全局符號(hào)*/ -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.調(diào)用Hex6x轉(zhuǎn)換工具,simple0.out:由CCSv5鏈接產(chǎn)生的ELF可執(zhí)行目標(biāo)文件,在執(zhí)行批處理文件之前,該文件必須存放在同一目錄下; -a :指定經(jīng)過(guò)Hex6x轉(zhuǎn)換后的文件存儲(chǔ)格式為ASCII-HEX格式,即將十六進(jìn)制數(shù)由ASCII字符表示;顯然,還可以指定輸出文件格式為其他規(guī)定的格式(參見(jiàn)文獻(xiàn)1.pp.647-649),simple0.out /*輸入文件*/ -a /*生成文件為ASCII-Hex格式*/ -boot /*把所有初始化段轉(zhuǎn)化為可導(dǎo)

9、引格式(代替SECTIONS偽指令)*/ -e _c_int00 /*指定程序入口地址,在引導(dǎo)程序加載后從那里開始執(zhí)行程序,該值可以是具體的地址,也可以是一個(gè)全局符號(hào)*/ -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.調(diào)用Hex6x轉(zhuǎn)換工具,-boot

10、: 該選項(xiàng)表示將.out文件中的所有初始化段寫入到輸出的引導(dǎo)表文件;同樣可通過(guò)-bootsection 選項(xiàng)指定若干初始化段寫入到輸出的引導(dǎo)表文件,成為可引導(dǎo)段。未初始化段(.bss .usect)不可被寫入到輸出引導(dǎo)表文件。引導(dǎo)表參見(jiàn)構(gòu)建引導(dǎo)表部分。,simple0.out /*輸入文件*/ -a /*生成文件為ASCII-Hex格式*/ -boot /*把所有初始化段轉(zhuǎn)化為可導(dǎo)引格式(代替SECTIONS偽指令)*/ -e _c_int00 /*指定程序入口地址,在引導(dǎo)程序加載后從那里開始執(zhí)行程序,該值可以是具體的地址,也可以是一個(gè)全局符號(hào)*/ -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.調(diào)用Hex6x轉(zhuǎn)換工具,-e _c_int00 :-e選項(xiàng)指定程序入口,即程序被加載之后從那里執(zhí)行;該選項(xiàng)指定的值可以是具體的程序段地址,也可以是程序中的全局符號(hào)(該符號(hào)被保存在.out文件中,參見(jiàn)文獻(xiàn)3,為ELF格式文件的ELF頭的第五個(gè)成員變量)

12、 -order L: 設(shè)定輸出文件數(shù)字字節(jié)排列方式:-order L為小端終結(jié)方式,即最低有效字節(jié)排列在最后;與通常所說(shuō)的大小端模式相反,通常所說(shuō)小端模式指最低有效字節(jié)排列在前(?,存疑),simple0.out /*輸入文件*/ -a /*生成文件為ASCII-Hex格式*/ -boot /*把所有初始化段轉(zhuǎn)化為可導(dǎo)引格式(代替SECTIONS偽指令)*/ -e _c_int00 /*指定程序入口地址,在引導(dǎo)程序加載后從那里開始執(zhí)行程序,該值可以是具體的地址,也可以是一個(gè)全局符號(hào)*/ -order L /*大小端選擇 -order L 為小端終結(jié);-order M 為大端終結(jié)*/ -map

13、SPIBOOT0.map /*輸出映像文件*/ ROMS /*ROMS偽指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定輸出文件*/ ,2.調(diào)用Hex6x轉(zhuǎn)換工具,-map SPIBOOT0.map 指定輸出映像文件。映像文件指出存儲(chǔ)器上每一個(gè)區(qū)域、它的參數(shù)、相關(guān)聯(lián)的輸出文件名,以及按地址分開的內(nèi)容表。.map文件在第三部分進(jìn)行描述。 注:由命令文件中的轉(zhuǎn)換選項(xiàng)設(shè)定的引導(dǎo)表文件包含程序各初始化段及相關(guān)信息參數(shù),該引導(dǎo)表文件數(shù)據(jù)將被片上引導(dǎo)加載

14、器(bootloader)加載到DSP上的內(nèi)存空間(加載地址空間,不是運(yùn)行地址空間)。該內(nèi)存空間由ROMS偽指令描述。,simple0.out /*輸入文件*/ -a /*生成文件為ASCII-Hex格式*/ -boot /*把所有初始化段轉(zhuǎn)化為可導(dǎo)引格式(代替SECTIONS偽指令)*/ -e _c_int00 /*指定程序入口地址,在引導(dǎo)程序加載后從那里開始執(zhí)行程序,該值可以是具體的地址,也可以是一個(gè)全局符號(hào)*/ -order L /*大小端選擇 -order L 為小端終結(jié);-order M 為大端終結(jié)*/ -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偽指令用一張地址區(qū)域參數(shù)表指定系統(tǒng)的物理存儲(chǔ)器配置,即對(duì)DSP外部存放程序的存儲(chǔ)器的描述。 ROMS偽指令與TMS320C6000連接器的MEMORY偽指令類似:二者定義的都是目標(biāo)地址空間的存儲(chǔ)器映射圖。ROMS偽指令的一行定義一個(gè)指定的地址區(qū)域。,ROMS /*ROMS偽指令*/ ROM1: org = 0 x0880, le

16、ngth = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定輸出文件*/ ,3.ROMS偽指令,ROM1:表示存儲(chǔ)器區(qū)域。該名稱可以使18各字符; org: 表示存儲(chǔ)器區(qū)域的起始地址,它可以是origin、org或者o;上圖指定存儲(chǔ)區(qū)域從實(shí)際物理地址0 x0880開始,該值沒(méi)有從0開始,是因?yàn)榇鎯?chǔ)器的開始不分要存放用于bootloader的其他參數(shù)數(shù)據(jù); length: 指定存儲(chǔ)區(qū)域的長(zhǎng)度作為ROM器件的物理長(zhǎng)度,它可以是length、len或者l;上圖指定存儲(chǔ)區(qū)域長(zhǎng)度為0 x2000000(Bytes),即

17、32MB;因此存儲(chǔ)器空間應(yīng)該大于0 x0880B+0 x2000000B,ROMS /*ROMS偽指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定輸出文件*/ ,3.ROMS偽指令,memwidth : 指定DSP內(nèi)部存儲(chǔ)系統(tǒng)的物理寬度;通常存儲(chǔ)系統(tǒng)在物理上與目標(biāo)處理器的寬度相同,C6678為32bits處理器。 romwidth:轉(zhuǎn)換后的文件將被存儲(chǔ)到DSP外部的存儲(chǔ)器ROM中,該選項(xiàng)指定外部存儲(chǔ)系統(tǒng)的物理寬度,在本例中外部存儲(chǔ)寬度為32b

18、its。 關(guān)于目標(biāo)寬度、存儲(chǔ)器寬度及ROM寬度的詳細(xì)描述參見(jiàn)文獻(xiàn)1.pp.632-634,在格式轉(zhuǎn)換過(guò)程中,上述寬度將決定很多實(shí)現(xiàn)細(xì)節(jié) ,文獻(xiàn)同樣進(jìn)行了描述,在此不做進(jìn)一步解釋。 files指定了輸出文件名。,ROMS /*ROMS偽指令*/ ROM1: org = 0 x0880, length = 0 x2000000, memwidth = 32, romwidth = 32 files = simple0.btbl /*指定輸出文件*/ ,3.ROMS偽指令,左圖是轉(zhuǎn)換過(guò)程中產(chǎn)生的映像文件(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偽指令,左圖是轉(zhuǎn)換過(guò)程中產(chǎn)生的映像文件(SPIBOOT0.map );右圖為輸入.out文件文件的段分布映射(timer.map)。,輸出數(shù)據(jù)在存儲(chǔ)器ROM上的映射結(jié)果,被轉(zhuǎn)換到引導(dǎo)表的初始化段名;如上述介 紹,未初始化段不會(huì)被轉(zhuǎn)換到引導(dǎo)表, 如上頁(yè)右圖棕色標(biāo)記的各段,各段在外部存儲(chǔ)器ROM上的起始地址; 首段起始地址

25、有ROMS偽指令給出, 隨后各段地址依次累加,各段被加載到DSP內(nèi)部存儲(chǔ)系統(tǒng)后的存儲(chǔ)地址,各段長(zhǎng)度,* 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.構(gòu)建導(dǎo)引表,4.構(gòu)建導(dǎo)引表,引導(dǎo)表格式很簡(jiǎn)單。它由一個(gè)4B的頭部記錄位域,該位域指明在完成數(shù)據(jù)復(fù)制后,引導(dǎo)加載器應(yīng)當(dāng)跳轉(zhuǎn)到的地址,即程序的入口地址。頭部記錄之后,每一個(gè)包含在引導(dǎo)表內(nèi)的段由如下內(nèi)容組成: 含有段尺寸的4B位域 含有復(fù)制的目的地址的4B位域 實(shí)際復(fù)制數(shù)據(jù) 可以輸入多個(gè)段,在數(shù)據(jù)結(jié)尾處有4B的0,表示數(shù)據(jù)結(jié)束。,引導(dǎo)加載器的輸入時(shí)引導(dǎo)表。引導(dǎo)表包含著記錄,它只是引導(dǎo)加載器把包含在表內(nèi)的數(shù)據(jù)塊復(fù)制到指定的目的地址。Hex6x轉(zhuǎn)換工具為加載器構(gòu)建引導(dǎo)表。,4.構(gòu)建導(dǎo)引表,引導(dǎo)加載器的輸入時(shí)引導(dǎo)表。引導(dǎo)表包含著記錄,它只是引導(dǎo)加載器把包含在表內(nèi)的數(shù)據(jù)塊復(fù)制到指定的目的地址。Hex6x轉(zhuǎn)換工具為加載器構(gòu)建引導(dǎo)表。,程序入

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論