




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實用文檔DSP的CMD文件詳解CMD是用來分配ROM和RAM空間用的,告訴鏈接程序怎樣計 算地址和分配空間。所以不同的芯片就有不同大小的ROM和RAM ,存放用戶程序的地方也不盡相同。所以要根據(jù)芯片進行修改,分為MEMORY和SECTIONS兩個部分。MEMORY(PAGE 0.PAGE 1.SECTIONS(.vectors.reset.MEMORY是用來指定芯片的ROM和RAM的大小和劃分出幾 個區(qū)間。PAGE 0對應(yīng)ROM , PAGE 1對應(yīng)RAM。PAGE里包含的 區(qū)間名字與其后面的參數(shù)反映了該區(qū)間的起始地址和長度。SECTIONS :(在程序里添加下面的段名,如.vectors。用
2、來指定 該段名以下,另一個段名以上的程序(屬于PAGE0)或數(shù)據(jù)(屬于PAGE1)放到“符號后的空間名字所在的地方。)標準文案實用文檔標準文案SECTIONS(.vectors : ( VECS PAGE 0.reset : ( VECS PAGE 0eg:MEMORY(PAGE 0:VECS:origin=00000h, length =00040hLOW:origin =00040h, length=03FC0hSARAM:origin=04000h, length=00800hB0:origin = 0FF00h, length =00100hPAGE 1:B0:origin = 002
3、00h, 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.stack: ( SARAM PAGE 1.sysmem : ( SARA
4、M PAGE 1由三部分組成:1輸入/輸出定義:這一部分,可以通過ccs的“Build Option.菜單設(shè)置:.obj(鏈接的目標文件)、.lib(鏈接的庫文件)、.map(生成的交 叉索引文件)、.out(生成的可執(zhí)行代碼)。2MEMORY命令:描述系統(tǒng)實際的硬件資源3SECTION命令:描述段”如何定位例子:.cmd文件-c-o hello.out-m hello.map-stack 100-l rts2xx.lib實用文檔標準文案MEMORY(PAGE 0: VECT:origin=0 x8000,length 0 x040PAGE 0: PROG:origin=0 x8040,len
5、gth 0 x6000PAGE 1: DATA:origin=0 x8000,length 0 x400SECTIONS(.vextors VECT PAGE 0.text PROG PAGE 0.bss DATA PAGE 1.const DATA PAGE 1存儲模型:c程序的代碼和數(shù)據(jù)如何定位系統(tǒng)定義:.cinit存放程序中的變量初值和常量.const存放程序中的字符常量、浮點常量和用const聲明的常量.switch存放程序中switch語句的跳轉(zhuǎn)地址表.text存放程序代碼.bss為程序中的全局和靜態(tài)變量保留存儲空間.far為程序中用far聲明的全局和靜態(tài)變量保留空間.stack為程
6、序系統(tǒng)堆棧保留存儲空間,用于保存返回地址、函數(shù)間的參數(shù)傳遞、存儲局部變量和保存中間結(jié)果實用文檔標準文案.sysmem用于程序中的malloc、calloc、和realoc函數(shù)動態(tài)分配存儲空間CMD的專業(yè)名稱叫鏈接器配置文件,是存放鏈接器的配置信息 的,我們簡稱為命令文件,其中比較關(guān)鍵的就是MEMORY和SECTIONS兩個偽指令的使用,常常令人困惑,系統(tǒng)出現(xiàn)的問題也經(jīng) 常與它們的不當使用有關(guān)。CCS是DSP軟件對DOS系統(tǒng)繼承的開發(fā) 環(huán)境,CCS的命令文件經(jīng)過DOS命令文件長時間的引申發(fā)展,已經(jīng) 變得非常簡潔(不知道TI文檔有沒有詳細CMD配置說明)。我學CMD是從DOS里的東西開始的,所以也
7、從DOS環(huán)境下的CMD說起:1、命令文件的組成命令文件的開頭部分是要鏈接的各個子目標文件的名字,這樣鏈接器就可以根據(jù)子目標文件名,將相應(yīng)的目標文件鏈接成一個文件; 接下來就是鏈接器的操作指令,這些指令用來配置鏈接器,接下來就 是MEMORY和SECTIONS兩個偽指令的相關(guān)語句,必須大寫。MEMORY,用來配置目標存儲器,SECTIONS用來指定段的存放位 置。結(jié)合下面的典型DOS環(huán)境的命令文件link.cmd來做一下說明:file.obj子目標文件名1file2.obj /子目標文件名2file3.obj /子目標文件名3-o prog.out連接器操作指令,用來指定輸出文件-m prog.
8、m用來指定MAP文件實用文檔標準文案MEMORY略SECTIONS略otherlink.cmd本命令文件link.cmd要調(diào)用的otherlink.cmd等其他命令文件,則文件 的名字要放到本命令文件最后一行,因為放開頭的話,鏈接器是不會 從被調(diào)用的其他命令文件中返回到本命令文件。2、MEMORY偽指令MEMORY用來建立目標存儲器的模型,SECTIONS指令就可以根據(jù) 這個模型來安排各個段的位置,MEMORY指令可以定義目標系統(tǒng)的 各種類型的存儲器及容量。MEMORY的語法如下:MEMORYPAGE 0 : name1(attr) : origin = constant,length = c
9、onstant name1n(attr) : origin= constant,length = constantPAGE 1 : name2(attr) : origin = constant,length = constantname2n(attr) : origin = constant,length = constantPAGE n : namen(attr) : origin = constant,length = constant namenn(attr) : origin= constant,length = constant實用文檔標準文案PAGE關(guān)鍵詞對獨立的存儲空間進行標記
10、,頁號n的最大值為255,實際應(yīng)用中一般分為兩頁,PAGE0程序存儲器和PAGE1數(shù)據(jù)存儲器。name存儲區(qū)間的名字,不超過8個字符,不同的PAGE上可以出現(xiàn) 相同的名字(最好不用,免的搞混),一個PAGE內(nèi)不許有相同的nam& attr的屬性標識,為R表示可讀;W可寫X表示區(qū)間可以裝入可執(zhí) 行代碼;I表示存儲器可以進行初始話,什么屬性代碼也不寫,表示 存儲區(qū)間具有上述的四種屬性,基本上我們都選擇這種寫法。origin:略。length:略。下面是經(jīng)常用的2407的簡單寫法大家參考,程序從0 x060開始,要避 開加密位,不從0 x0044開始更可靠一點,此例中的同名的頁可以只 寫第一
11、個,其后省略,但寫上至少安全一點:MEMORYPAGE 0: VECS: origin = 0 x0000, length 0 x40PAGE 0: PROG: origin = 0 x0060, length 0 x6000PAGE 1: B0 : origin = 0 x200, length 0 x100PAGE 1: B1 : origin = 0 x300, length 0 x100PAGE 1: DATA: origin = 0 x0860, length 0 x07803、SECTIONS偽指令實用文檔標準文案SECTIONS指令的語法如下:SECTIONS.text:所有.t
12、ext輸入段名 load=加載地址run=運行地址.data:所有.data輸入段名 load=加載地址run=運行地址.bss:所有.bss輸入段名 load=加載地址run=運行地址.other:所有.other輸入段名 load =加載地址run=運行地址SECTIONS必須用大寫字母,其后的大括號里是輸出段的說明性語句,每一個輸出段的說明都是從段名開始,段名之后是如何對輸入段進行組織和給段分配存儲器的參數(shù)說明:以.text段的屬性語句為例,“所有.text輸入段名 ”這段內(nèi)容用來說明連接器輸出段的.text段由哪些子目標文件的段組成,舉例如下SECTIONS.text: file1.o
13、bj(.text) file2(.text) file3(.text,cinit)略指明輸出段.text要鏈接file1.obj的.text和file2的.text還有file3的.text和.cinit。在CCS的SECTIONS里通常只寫一個中間沒有內(nèi)容的“”就表示所有的目標文件的相應(yīng)段。接下來說明“l(fā)oad加載地址run=運行地址”鏈接器為每個輸出段都在目標存儲器里分配兩個 地址:一個是加載地址,一個是運行地址。通常情況下兩個地址是相 同的,可以認為輸出段只有一個地址,這時就可以不加“run運行地實用文檔標準文案址”這條語句了;但有時需要將兩個地址分開,比如將程序加載到FLASH ,然后
14、放到RAM中高速運行,這就用到了運行地址和加載地 址的分別配置了,如下例所示:.const :略 load = PROG run = 0 x0800 ,常量加載在程序存儲區(qū),配 置為在RAM里調(diào)用?!發(fā)oad加載地址”的幾種寫法需要說明一下, 首先“l(fā)oad鍵字可以省略,”可以寫成“”,加載地址”可以是:地址值、存儲區(qū)間的名字、PAGE關(guān)鍵詞等,所以大家見到“.text: 0 x0080這樣的語句可千萬不要奇怪?!皉un運行地址”中的“=可以用“;其它的簡化寫法就沒有了。大家不要亂用。4、CCS中的案例在CCS中的命令文件好像簡化了不少,少了很多東西,語句也 精簡了好多,首先不用指定輸入鏈接器
15、的目標文件,CCS會白動默認 處理,其次鏈接器的配置命令也和DOS的環(huán)境不同,需要了解的請 找TI文檔吧!下面是劉和平書中的例子,大家來看看是不是可以很 精確的理解了呢!-stack 40MEMORY(PAGE 0 : VECS : origin = 0h , length = 40hPVECS : origin = 40h , length = 70hPROG : origin = 0b0h , length = 7F50hPAGE 1 : MMRS : origin = 0h , length = 05FhB2 : origin = 0060h , length = 020hB0 : or
16、igin = 0200h , length = 100h實用文檔標準文案B1 : origin = 0300h , length = 100hSARAM : origin = 0800h , length = 0800hEXT : origin = 8000h , length = 8000hSECTIONS(.reset : ( VECS PAGE 0.vectors : ( VECS PAGE 0.pvecs : ( PVECS PAGE 0.text : ( PROG PAGE 0.cinit : ( PROG PAGE 0.bss : ( SARAM PAGE 1.const : (
17、SARAM PAGE 1.stack : ( B1 PAGE 1第二章CMD文件的編寫1、COFF格式1通用目標文件格式(Common Object File Format)是一種流行的二 進制可執(zhí)行文件格式,二進制可執(zhí)行文件包括庫文件(lib),目標文 件(obj)最終可執(zhí)行文件(out)。,現(xiàn)今PC機上的Windows95和NT4.0以后的操作系統(tǒng)的二進制文件格式(PE)就是在COFF格式基礎(chǔ)上 的進一步擴充。2 COFF格式:詳細的COFF文件格式包括段頭,可執(zhí)行代碼和初始 化數(shù)據(jù),實用文檔標準文案可重定位信息,行號入口,符號表,字符串表等,這些屬于 編寫操作系統(tǒng)和編譯器人員關(guān)心范疇。而
18、對于C只需要了解定義段和給段分配空間就可以了。3采用COFF更有利于模塊化編程, 程序員可以白由決定愿意把哪 些代碼歸屬到哪些段,然后加以不同的處理。2、Section目標文件中最小單位稱為塊。一個塊就是最終在存儲器映 象中占據(jù)連續(xù)空間的一段代碼或數(shù)據(jù)。1 COFF目標文件包含三個默認的塊:.text可執(zhí)行代碼.data已初始化數(shù)據(jù).bss為未初始化數(shù)據(jù)保留的空間2匯編器對塊的處理未初始化塊:.bss變量存放空間.usect用戶白定義的未初始化段初始化塊:.text匯編指令代碼.data常數(shù)數(shù)據(jù)(比如對變量的初始化數(shù)據(jù)).sect用戶白定義的已初始化段.asect通.sect,多了絕對地址定位
19、功能,一般不用3C語言的段未初始化塊(data):實用文檔標準文案.bss存放全局和靜態(tài)變量.ebss長調(diào)用的.bss前過了64K地址限制).stack存放C語言的棧.sysmem存放C語言的堆.esysmem長調(diào)用的.sysmem色過了64K地址限制)初始化塊:.text可執(zhí)行代碼和常數(shù)(program).switch switch語句產(chǎn)生的常數(shù)表格(program/低64K數(shù)據(jù)空間).pinit Tables for global constructors (C+)(program).cinit用來存放對全局和靜態(tài)變量的初始化常數(shù)值(program).const全局和靜態(tài)的const變量初
20、始化值和字符串常數(shù),(data).econst長.const (可定位到任何地方)(data)3白定義段(C語言)#pragma DATA_SECTION(函數(shù)名或全局變量名,用戶白定義在數(shù)據(jù) 空間的段名);#pragma CODE_SECTION(函數(shù)名或全局變量名,用戶 白定義在程序空間的段名),不能在函數(shù)體內(nèi)聲明,必須在定義和使 用前聲明,#pragma可以阻止對未調(diào)用的函數(shù)的優(yōu)化3、連接命令文件(CMD)1 MEMORY指定存儲空間MEMORY實用文檔標準文案PAGE 0:name 0 attr : origin = constant, length = constantPAGE n:
21、name n attr : origin = constant, length = constantPAGE n:標示存儲空間,n SECTIONS分配段SECTIONSname : property,property, .name輸出段的名稱property:輸出段的屬性:load= allocation(強制地址或存儲空間名稱)同allocation:定義輸出段將會被裝載到哪里。run= allocation(強制地址或存儲空間名稱)同allocation:定義輸出段將會在哪里運行。注:CMD 文件中只出現(xiàn)一個關(guān)鍵字 load或 run 時,表示兩者的地址時表示 兩者的地址時重合的。PAG
22、E = n,段位于那個存儲頁面空間。例:ramfuncs : LOAD = FLASHD,實用文檔標準文案RUN = RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE = 03直接寫編譯命令-l rts2800_ml.lib連接系統(tǒng)文件rts2800_ml.lib-o filename.out最終生成的二進制文件命名為filename.out-m filename.map生成映射文件filename.map-stack 0 x200堆棧為512字4、
23、.const段:由關(guān)鍵字const限定的全局變量(const限定的局部變量不產(chǎn)生) 初始化值,和出現(xiàn)在表達式(做指針使用,而用來初始化字符串數(shù)組 變量不產(chǎn)生)中的字符串常數(shù),另外數(shù)組和結(jié)構(gòu)體是局部變量時,其 初始值會產(chǎn)實用文檔標準文案生.const段,而全局時不產(chǎn)生。DSP 的 CM以件講解 2:CM 以件由三部分組成:(1)輸入輸出定義;(2) MEMOR 榆令;(3) SECTIO N命令。輸入/輸出定義:這一部分,可以通過 ccs的“Build Option.”菜單設(shè)置。obj鏈接的目標文件。lib鏈接的庫文件。map 生成的交義索引文件。out生成的可執(zhí)行代碼MEMORY 令:描述系統(tǒng)
24、實際的硬件資源SECTION令:描述“段”如何定位下面給出一個例子:-c-o hello.out-m hello.map-stack 100-l rts2xx.libMEMORYPAGE 0: VECT:origin=0 x8000,length 0 x040PAGE 0: PROG:origin=0 x8040,length 0 x6000PAGE 1: DATA:origin=0 x8000,length 0 x400SECTIONS.vextors VECT PAGE 0.text PROG PAGE 0.bss DATA PAGE 1.const DATA PAGE 1存儲模型說明:.
25、cinit存放程序中的變量初值和常量.const存放程序中的字符常量、浮點常量和用const 聲明的常量.switch 存放程序中 switch 語句的跳轉(zhuǎn)地址表實用文檔標準文案.text 存放程序代碼.bss為程序中的全局和靜態(tài)變量保留存儲空間.far為程序中用 far聲明的全局和靜態(tài)變量保留空間.stack 為程序系統(tǒng)堆棧保留存儲空間,用丁保存返回地址、函數(shù)問的參數(shù) 傳遞、存儲局部變量和保存中間結(jié)果.sysmem用丁程序中的 malloc、calloc 、和 realoc 函數(shù)動態(tài)分配存儲空 間.text可執(zhí)行代碼一、CM臨令文件常用的偽指令1、.cint:存放已明確初始化的全局變量和靜態(tài)
26、變量2 .const:存放已明確初始化的字符串常量、全局變量和靜態(tài)常量3 .switch:存放對于大型switch語句的跳轉(zhuǎn)表4、.text:存放可執(zhí)行代碼和浮點數(shù)常量5、.bss :存放沒有初始化的全局變量和靜態(tài)變量6、.stack:定義軟件堆棧二、CMDf令文件內(nèi)容CM%用來分配程序存儲器空間rom和數(shù)據(jù)存儲器空間ram的,告訴鏈接程序怎樣計算 地址和分配空間。不同的芯片有不同大小的rom和ram,放用戶程序的地方也不盡相同,所以要根據(jù)DSP的存儲器的地址范圍來編寫。分兩部分:MEMORY SECTIONS.1、MEMORY用來指定芯片的rom和ram的大小和劃分出幾個區(qū)間。MEMORY
27、PAGE 0 : name1(attr): origin=constant, length=constant;PAGE 1: namen(attr): origin=constant, length=constant;PAGE0對應(yīng)rom, PAGE1對應(yīng)ram。PAGE包含的區(qū)間名字與其后面的參數(shù)反映了 該區(qū)間的起始地址和長度。name存儲器名稱,同一頁上的存儲器名稱不能相同,不同頁上的可以相同。attr存儲區(qū)的屬性,未規(guī)定的可以有R(只讀)、W(只寫)、X(存儲器可以包含可執(zhí)行代碼)、I(存儲器可以被初始化)。2、Section塊用來控制段的構(gòu)成與地址分配。 對于不同的系統(tǒng)配置,Secti
28、on的分配方式也 不相同,鏈接器通過Section來控制地址的分配,所以Section的分配成了配置.cmd文件 的重要環(huán)節(jié)。SECTIONS.vectors : VECS PAGE 0.reset : VECS PAGE 0實用文檔標準文案它分成兩個基本的部分:(1)被初始化的Section(包含數(shù)據(jù)表和可執(zhí)行代碼).text:它包含所有的可執(zhí)行代碼和常數(shù),必須放在程序頁.cinit:它包含初始化的變量和常量表,要求放在程序頁.pinit:它包括全局構(gòu)造器(C+)初始化的變量表,要求放在程序頁.const:它包括字符串、聲明、以及被明確初始化過的全局和靜態(tài)變量,要求放在低 地址數(shù)據(jù)頁。.ec
29、onst:是在使用大存儲器模式時使用的,包括字符串、聲明、 以及被明確初始化過實用文檔標準文案的全局變量和靜態(tài)變量,可以在數(shù)據(jù)頁的任何地方。.switch:它包括為轉(zhuǎn)換聲明設(shè)置的表格,可以放在程序頁,也可以放在低地址的數(shù)據(jù)頁。(2)未被初始化的Section(為程序運行中創(chuàng)建和存放的變量在存儲器中保留空間).bss:它為全局變量和靜態(tài)變量保留空間.在程序開始運行時,C導入路徑把數(shù)據(jù)從.cinit節(jié)復制出去然后存在.bss節(jié)中.要求放在低地址的數(shù)據(jù)頁.ebbs:它是在遠訪問(C)和大存儲器模式下使用,它為全局變量和靜態(tài)變量保留空間.在程序開始運行時,C導入路徑把數(shù)據(jù)從.cinit段復制出去然后存
30、在.ebss節(jié)中。可以存放 在數(shù)據(jù)頁的任何地方。.stack:為C系統(tǒng)堆棧保留空間,這部分存儲器為用來將聲明傳給函數(shù)及為局部變量 留出空間。要求放在低地址的數(shù)據(jù)頁。.system:動態(tài)存儲器分配保留空間,這個空間用于malloc函數(shù),如果不使用malloc函數(shù),這個段的大小就是0。要求放在低地址的數(shù)據(jù)頁。.esystem:動態(tài)存儲器分配保留空間,這個空間用于外部malloc函數(shù),如果不使用外 部malloc函數(shù),這個段的大小就是0??梢卜旁跀?shù)據(jù)頁的任何地方eg:命令文件示例MEMORYPAGE 0: VECS: origin = 00000h, length = 00040h/程序復位PVEC
31、S: origin = 00040h, length = 00070h/外圍模塊中斷向量PROG: origin = 000b0h, length = 07F50h/片上FlashPAGE 1: B0: origin = 00200h, length = 00100h/DRAM B0塊B1: origin = 00300h, length = 00100h/DRAM B1塊B2: origin = 00060h, length = 00020h/DRAM B2塊SARAM: origin = 00800h, length = 00800h/SRAM塊EXT: origin = 08000h, length = 08000h/外部存儲器SECTIONS.reset : VECS PAGE 0/復位中斷向量.vectors : VECS PAGE 0/中斷向量表.pvecs : PVECS PAGE 0.text: PROG PAGE 0.cinit : PROG PAGE 0.bss: SARAM PAGE 1.const : SARAM PAG
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年蘭州年貨運從業(yè)資格證模擬考試
- 2025年針織橫機電控項目發(fā)展計劃
- 生物大學生創(chuàng)業(yè)競賽項目思路
- 愛達冬季施工方案
- 建筑方案和施工
- 韓國高新技術(shù)產(chǎn)業(yè)
- 翻開新篇章的職業(yè)發(fā)展計劃
- 心理健康與工作計劃的協(xié)調(diào)
- 班級禮儀教育的工作安排計劃
- 2025年濮陽貨運從業(yè)資格證模擬考試保過版
- 第18講 等腰三角形 課件中考數(shù)學復習
- 《萬以內(nèi)數(shù)的認識》大單元整體設(shè)計
- 財政部金融企業(yè)不良資產(chǎn)批量轉(zhuǎn)讓管理辦法(財金[2012]6號)
- 精品資料(2021-2022年收藏)建筑立面裝飾設(shè)計技術(shù)導則
- 倉庫管理警示標語
- ISO9001質(zhì)量管理體系目錄結(jié)構(gòu)
- 5米對數(shù)視力表及E尺寸標準A4
- 十三五全國眼健康規(guī)劃(2016-2020年)終期自評報告
- “十四五”交通運輸發(fā)展規(guī)劃思路
- 人口變動情況抽樣調(diào)查工作進展情況匯報
- SBAR溝通模式在臨床中的應(yīng)用
評論
0/150
提交評論