(完整版)DSP的CMD文件詳解(整理版)_第1頁(yè)
(完整版)DSP的CMD文件詳解(整理版)_第2頁(yè)
(完整版)DSP的CMD文件詳解(整理版)_第3頁(yè)
(完整版)DSP的CMD文件詳解(整理版)_第4頁(yè)
(完整版)DSP的CMD文件詳解(整理版)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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、DSP 的 CMD 文件詳解CMD 是用來(lái)分配ROM 和 RAM 空間用的,告訴鏈接程序怎樣計(jì)算地址和分配空間。 所以不同的芯片就有不同大小的 ROM 和 RAM ,存放用戶程序的地方也不盡相同。所以要根據(jù)芯片進(jìn)行修改,分為MEMORY 和 SECTIONS 兩個(gè)部分。MEMORYPAGE 0 PAGE 1SECTIONS.vectors .reset MEMORY 是用來(lái)指定芯片的 ROM 和 RAM 的大小和劃分出幾個(gè)區(qū)間。 PAGE 0對(duì)應(yīng) ROM , PAGE 1對(duì)應(yīng) RAM 。 PAGE 里包含的區(qū)間名字與其后面的參數(shù)反映了該區(qū)間的起始地址和長(zhǎng)度。SECTIONS:(在程序里添加下面

2、的段名,如.vectors。用來(lái)指定該段名以下,另一個(gè)段名以上的程序(屬于PAGE0)或數(shù)據(jù)(屬于PAGE1)放至U “ 符號(hào)后的空間名字所在的地方。)SECTIONS.vectors : > VECS PAGE 0.reset : > VECS PAGE 0eg:MEMORYPAGE 0:VECS:origin = 00000h, length = 00040hLOW:origin = 00040h, length = 03FC0hSARAM :origin = 04000h, length = 00800hB0 :origin = 0FF00h, length = 00100h

3、PAGE 1:B0:origin = 00200h,length = 00100hB1:origin = 00300h,length = 00100hB2:origin = 00060h,length = 00020hSARAM :origin = 08000h, length = 00800hSECTIONS .text: > LOW PAGE 0.cinit: > LOW PAGE 0.switch : > LOW PAGE 0.const: > SARAM PAGE 1.data: > SARAM PAGE 1.bss: > SARAM PAGE 1.

4、stack: > SARAM PAGE 1.sysmem : > SARAM PAGE 1由三部分組成: 輸入/輸出定義:這一部分,可以通過(guò) ccs的“Build Option菜單設(shè)置:.obj(鏈接的目標(biāo)文件卜.lib(鏈接的庫(kù)文件卜.map(生成的交 叉索引文件)、.out(生成的可執(zhí)行代碼)。 MEMORY 命令:描述系統(tǒng)實(shí)際的硬件資源 SECTION 命令:描述 “段”如何定位例子:.cmd 文件-c-o hello.out -m hello.map-stack 100-l rts2xx.libMEMORYPAGE 0: VECT:origin=0x8000,length

5、0x040PAGE 0: PROG:origin=0x8040,length 0x6000PAGE 1: DATA:origin=0x8000,length 0x400SECTIONS.vextors >VECT PAGE 0.text >PROG PAGE 0.bss >DATA PAGE 1.const >DATA PAGE 1存儲(chǔ)模型:c程序的代碼和數(shù)據(jù)如何定位系統(tǒng)定義:.cinit 存放程序中的變量初值和常量.const存放程序中的字符常量、浮點(diǎn)常量和用 const聲明的常量.switch 存放程序中 switch 語(yǔ)句的跳轉(zhuǎn)地址表.text 存放程序代碼.bs

6、s 為程序中的全局和靜態(tài)變量保留存儲(chǔ)空間.far為程序中用far聲明的全局和靜態(tài)變量保留空間.stack 為程序系統(tǒng)堆棧保留存儲(chǔ)空間,用于保存返回地址、函數(shù)間的參數(shù)傳遞、存儲(chǔ)局部變量和保存中間結(jié)果.sysmem 用于程序中的 malloc 、 calloc 、和 realoc 函數(shù)動(dòng)態(tài)分配存儲(chǔ)空間CMD 的專(zhuān)業(yè)名稱(chēng)叫鏈接器配置文件,是存放鏈接器的配置信息的,我們簡(jiǎn)稱(chēng)為命令文件,其中比較關(guān)鍵的就是 MEMORY 和SECTIONS兩個(gè)偽指令的使用,常常令人困惑,系統(tǒng)出現(xiàn)的問(wèn)題也經(jīng)常與它們的不當(dāng)使用有關(guān)。CCS 是 DSP 軟件對(duì)DOS 系統(tǒng)繼承的開(kāi)發(fā)環(huán)境,CCS的命令文件經(jīng)過(guò)DOS命令文件長(zhǎng)時(shí)間

7、的引申發(fā)展,已經(jīng)變得非常簡(jiǎn)潔 (不知道 TI 文檔有沒(méi)有詳細(xì) CMD 配置說(shuō)明) 。 我學(xué) CMD是從 DOS 里的東西開(kāi)始的,所以也從DOS 環(huán)境下的 CMD 說(shuō)起:1、命令文件的組成命令文件的開(kāi)頭部分是要鏈接的各個(gè)子目標(biāo)文件的名字, 這樣鏈接器就可以根據(jù)子目標(biāo)文件名,將相應(yīng)的目標(biāo)文件鏈接成一個(gè)文件;接下來(lái)就是鏈接器的操作指令, 這些指令用來(lái)配置鏈接器, 接下來(lái)就是 MEMORY 和 SECTIONS 兩個(gè)偽指令的相關(guān)語(yǔ)句,必須大寫(xiě)。MEMORY ,用來(lái)配置目標(biāo)存儲(chǔ)器, SECTIONS 用來(lái)指定段的存放位置。結(jié)合下面的典型DOS 環(huán)境的命令文件link.cmd 來(lái)做一下說(shuō)明:file.ob

8、j /子目標(biāo)文件名 1file2.obj /子目標(biāo)文件名2file3.obj /子目標(biāo)文件名3- o prog.out /連接器操作指令,用來(lái)指定輸出文件- m prog.m /用來(lái)指定MAP文件MEMORY 略SECTIONS 略otherlink.cmd本命令文件link.cmd 要調(diào)用的 otherlink.cmd 等其他命令文件, 則文件的名字要放到本命令文件最后一行,因?yàn)榉砰_(kāi)頭的話,鏈接器是不會(huì)從被調(diào)用的其他命令文件中返回到本命令文件。2 、 MEMORY 偽指令MEMORY 用來(lái)建立目標(biāo)存儲(chǔ)器的模型, SECTIONS 指令就可以根據(jù)這個(gè)模型來(lái)安排各個(gè)段的位置, MEMORY 指令

9、可以定義目標(biāo)系統(tǒng)的各種類(lèi)型的存儲(chǔ)器及容量。 MEMORY 的語(yǔ)法如下:MEMORYPAGE 0 : name1(attr) : origin = constant,length = constantname1n(attr) : origin = constant,length = constantPAGE 1 : name2(attr) : origin = constant,length = constant name2n(attr) : origin = constant,length = constantPAGE n : namen(attr) : origin = constant,l

10、ength = constant namenn(attr) : origin = constant,length = constant PAGE關(guān)鍵詞對(duì)獨(dú)立的存儲(chǔ)空間進(jìn)行標(biāo)記,頁(yè)號(hào)n的最大值為255, 實(shí)際應(yīng)用中一般分為兩頁(yè),PAGE0程序存儲(chǔ)器和PAGE1數(shù)據(jù)存儲(chǔ)器。 name存儲(chǔ)區(qū)間的名字,不超過(guò) 8個(gè)字符,不同的PAGE上可以出現(xiàn) 相同的名字 (最好不用, 免的搞混) , 一個(gè) PAGE 內(nèi)不許有相同的name。attr 的屬性標(biāo)識(shí),為 R 表示可讀; W 可寫(xiě) X 表示區(qū)間可以裝入可執(zhí) 行代碼; I 表示存儲(chǔ)器可以進(jìn)行初始話,什么屬性代碼也不寫(xiě),表示 存儲(chǔ)區(qū)間具有上述的四種屬性,基本上

11、我們都選擇這種寫(xiě)法。origin: 略。 length:略。下面是經(jīng)常用的2407 的簡(jiǎn)單寫(xiě)法大家參考,程序從0x060 開(kāi)始,要避開(kāi)加密位,不從0x0044 開(kāi)始更可靠一點(diǎn),此例中的同名的頁(yè)可以只寫(xiě)第一個(gè),其后省略,但寫(xiě)上至少安全一點(diǎn):MEMORY PAGE 0: VECS: origin = 0x0000, length 0x40 PAGE 0: PROG: origin = 0x0060, length 0x6000 PAGE 1: B0 : origin = 0x200, length 0x100PAGE 1: B1 : origin = 0x300, length 0x100PAGE

12、 1: DATA: origin = 0x0860, length 0x07803 、SECTIONS 偽指令SECTIONS指令的語(yǔ)法如下:SECTIONS.text: 所有.text輸入段名 load =加載地址run =運(yùn)行地址.data: 所有.data輸入段名 load =加載地址run =運(yùn)行地址.bss: 所有.bss輸入段名 load =加載地址run =運(yùn)行地址.other: 所有.other輸入段名 load =加載地址run =運(yùn)行地址SECTIONS 必須用大寫(xiě)字母, 其后的大括號(hào)里是輸出段的說(shuō)明性語(yǔ)句, 每一個(gè)輸出段的說(shuō)明都是從段名開(kāi)始, 段名之后是如何對(duì)輸入段進(jìn)行組

13、織和給段分配存儲(chǔ)器的參數(shù)說(shuō)明:以.text段的屬性語(yǔ)句為例,“所有.text輸入段名 ”這段內(nèi)容用來(lái)說(shuō)明連接器輸出段的 .text 段由哪些子目標(biāo)文件的段組成,舉例如下SECTIONS.text: file1.obj(.text) file2(.text) file3(.text,cinit) 略指明輸出段.text要鏈接file1.obj的.text和file2的.text還有file3的.text和.cinit。在CCS的SECTIONS里通常只寫(xiě)一個(gè)中間沒(méi)有內(nèi)容 的“”就表示所有的目標(biāo)文件的相應(yīng)段。接下來(lái)說(shuō)明“l(fā)oad加載地址 run =運(yùn)行地址 ”鏈接器為每個(gè)輸出段都在目標(biāo)存儲(chǔ)器里分配

14、兩個(gè)地址:一個(gè)是加載地址,一個(gè)是運(yùn)行地址。通常情況下兩個(gè)地址是相同的,可以認(rèn)為輸出段只有一個(gè)地址,這時(shí)就可以不加“ run =運(yùn)行地址”這條語(yǔ)句了;但有時(shí)需要將兩個(gè)地址分開(kāi),比如將程序加載到FLASH , 然后放到 RAM 中高速運(yùn)行, 這就用到了運(yùn)行地址和加載地址的分別配置了,如下例所示:.const :略 load = PROG run = 0x0800 ,常量加載在程序存儲(chǔ)區(qū),配置為在RAM里調(diào)用。"load加載地址”的幾種寫(xiě)法需要說(shuō)明一下, 首先“l(fā)oa睽鍵字可以省略,可以寫(xiě)成、”加載地址”可以是:地址值、存儲(chǔ)區(qū)間的名字、PAGE關(guān)鍵詞等,所以大家見(jiàn)到”.text: >

15、 0x0080 ”這樣的語(yǔ)句可千萬(wàn)不要奇怪?!?run =運(yùn)行地址” 中的“ = 可以”用 “ >,其它的簡(jiǎn)化寫(xiě)法就沒(méi)有了。大家不要亂用?!? 、 CCS 中的案例在 CCS 中的命令文件好像簡(jiǎn)化了不少,少了很多東西,語(yǔ)句也精簡(jiǎn)了好多,首先不用指定輸入鏈接器的目標(biāo)文件,CCS會(huì)自動(dòng)默認(rèn)處理,其次鏈接器的配置命令也和 DOS 的環(huán)境不同,需要了解的請(qǐng)找 TI 文檔吧!下面是劉和平書(shū)中的例子,大家來(lái)看看是不是可以很精確的理解了呢!-stack 40MEMORY PAGE 0 : VECS : origin = 0h , length = 40hPVECS : origin = 40h , l

16、ength = 70hPROG : origin = 0b0h , length = 7F50hPAGE 1 : MMRS : origin = 0h , length = 05FhB2 : origin = 0060h , length = 020hB0 : origin = 0200h , length = 100hB1 : origin = 0300h , length = 100hSARAM : origin = 0800h , length = 0800hEXT : origin = 8000h , length = 8000hSECTIONS.reset : > VECS P

17、AGE 0.vectors : > VECS PAGE 0.pvecs : > PVECS PAGE 0.text : > PROG PAGE 0.cinit : > PROG PAGE 0.bss : > SARAM PAGE 1.const : > SARAM PAGE 1.stack : > B1 PAGE 1第二章 CMD 文件的編寫(xiě)1、COFF格式1> 通用目標(biāo)文件格式( Common Object File Format) 是一種流行的二進(jìn)制可執(zhí)行文件格式,二進(jìn)制可執(zhí)行文件包括庫(kù)文件( lib ) ,目標(biāo)文件(obj)最終可執(zhí)行文件(

18、out)。,現(xiàn)今PC機(jī)上的 Windows95和NT4.0以后的操作系統(tǒng)的二進(jìn)制文件格式(PE)就是在COFF格式基礎(chǔ)上的進(jìn)一步擴(kuò)充。2> COFF 格式: 詳細(xì)的 COFF 文件格式包括段頭, 可執(zhí)行代碼和初始化數(shù)據(jù),可重定位信息,行號(hào)入口,符號(hào)表,字符串表等,這些屬于編寫(xiě)操作系統(tǒng)和編譯器人員關(guān)心范疇。而對(duì)于 C 只需要了解定義段和給段分配空間就可以了。3> 采用 COFF 更有利于模塊化編程,程序員可以自由決定愿意把哪些代碼歸屬到哪些段,然后加以不同的處理。2、 Section 目標(biāo)文件中最小單位稱(chēng)為塊。一個(gè)塊就是最終在存儲(chǔ)器映象中占據(jù)連續(xù)空間的一段代碼或數(shù)據(jù)。1> CO

19、FF 目標(biāo)文件包含三個(gè)默認(rèn)的塊:.text 可執(zhí)行代碼.data已初始化數(shù)據(jù).bss為未初始化數(shù)據(jù)保留的空間 2> 匯編器對(duì)塊的處理未初始化塊:.bss 變量存放空間.usect 用戶自定義的未初始化段初始化塊:.text 匯編指令代碼.data 常數(shù)數(shù)據(jù)(比如對(duì)變量的初始化數(shù)據(jù)).sect 用戶自定義的已初始化段.asect通.sect,多了絕對(duì)地址定位功能,一般不用3>C 語(yǔ)言的段未初始化塊(data) :.bss 存放全局和靜態(tài)變量.ebss長(zhǎng)調(diào)用的.bss超過(guò)了 64K地址限制).stack 存放 C 語(yǔ)言的棧.sysmem 存放 C 語(yǔ)言的堆.esysmem長(zhǎng)調(diào)用的.sy

20、smem(B過(guò)了 64K地址限制)初始化塊:.text 可執(zhí)行代碼和常數(shù)(program).switch switch語(yǔ)句產(chǎn)生的常數(shù)表格(program/低64K數(shù)據(jù)空間).pinit Tables for global constructors (C+)(program).cinit 用來(lái)存放對(duì)全局和靜態(tài)變量的初始化常數(shù)值(program).const 全局和靜態(tài)的 const 變量初始化值和字符串常數(shù),( data).econst長(zhǎng).const (可定位到任何地方) (data)3> 自定義段( C 語(yǔ)言)#pragma DATA_SECTION( 函數(shù)名或全局變量名 ,"用戶自定義在數(shù)據(jù)空間的段名");#pragma CODE_SECTION(函數(shù)名或全局變量名,”用戶自定義在程序空間的段名") ,不能在函數(shù)體內(nèi)聲明,必須在定義和使用前聲明,#pragma可以阻止對(duì)未調(diào)用的函數(shù)的優(yōu)化3、連接命令文件(CMD )1> MEMORY 指定存儲(chǔ)空間 MEMORYPAGE 0:name 0 attr : origin = constant, length = constantPAGE n:name n attr : origin = constant, length =

溫馨提示

  • 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)論