版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、DSP的CMD文件詳解(整理版CMD是用來分配ROM和RAM空間用的,告訴鏈接程序怎樣計算地址和分配 空間。所以不同的芯片就有不同大小的ROM和RAM ,存放用戶程序的地方也不 盡相同。所以要根據芯片進行修改,分為MEMORY和SECTIONS兩個局部。MEMORY(PAGE 0PAGE 1)SECTIONS(.vectors.reset)MEMORY是用來指定芯片的ROM和RAM的大小和劃分出幾個區(qū)間。PAGE 0對應ROM , PAGE 1對應RAM o PAGE里包含的區(qū)間名字與其后面的參數反映 了該區(qū)間的起始地址和長度。SECTIONS :(在程序里添加下面的段名,如.vectors。
2、用來指定該段名以下, 另一個段名以上的程序(屬于PAGE0或數據(屬于PAGE1放到“”符號后的空間名 字所在的地方。SARAM : origin = 0800h , length = 0800h EXT : origin = 8000h , length = 8000h SECTIONS.reset: VECS PAGE 0.vectors : VECS PAGE 0 .pvecs : PVECS PAGE 0 .text: PROG PAGEO.cinit: PROG PAGE 0.bss : SARAM PAGE 1,const: SARAM PAGE 1 .stack : Bl PAG
3、E 1)第二章CMD文件的編寫L COFF格式1通用目標文件格式(Common Object File Format)是一種流行的二進制可執(zhí) 行文件格式,二進制可執(zhí)行文件包括庫文件(lib),目標文件(obj)最終可執(zhí)行 文件(out) o ,現今PC機上的Windows95和NT4.0以后的操作系統(tǒng)的二進制文 件格式(PE)就是在COFF格式基礎上的進一步擴充。2COFF格式:詳細的COFF文件格式包括段頭,可執(zhí)行代碼和初始化數 據,可重定位信息,行號入口,符號表,字符串表等,這些屬于編寫操作系統(tǒng)和編 譯器人員關心范疇。而對于C只需要了解定義段和給段分配空間就可以了。3采用COFF更有利于模
4、塊化編程,程序員可以自由決定愿意把哪些代碼歸屬到哪些段,然后加以不同的處理。2、Section目標文件中最小單位稱為塊。一個塊就是最終在存儲器映象中占據 連續(xù)空間的一段代碼或數據。1COFF目標文件包含三個默認的塊:.text可執(zhí)行代碼.data已初始化數據.bss為未初始化數據保存的空間2匯編器對塊的處理未初始化塊:.bss變量存放空間.usect用戶自定義的未初始化段初始化塊:.text匯編指令代碼.data常數數據(比方對變量的初始化數據).sect用戶自定義的已初始化段.asect通.sect ,多了絕對地址定位功能,一般不用3C語言的段未初始化塊(data):.bss存放全局和靜態(tài)變
5、量.ebss長調用的.bss(超過了 64K地址限制.stack存放C語言的棧.sysmem存放C語言的堆.esysmem長調用的.sysmem(超過了 64K地址限制初始化塊:.text可執(zhí)行代碼和常數(program.switch switch語句產生的常數表格(program/低64K數據空間).pinit Tables for global constructors (C+(program.cinit用來存放對全局和靜態(tài)變量的初始化常數值(program.const全局和靜態(tài)的const變量初始化值和字符串常數,(data ) .econst 長.const (可定位到任何地方)(da
6、ta)3自定義段(C語言)#pragma DATA_SECTION(函數名或全局變量名,”用戶自定義在數據空間的段 名;#pragmaCODE_SECTION(函數名或全局變量名,用戶自定義在程序空間的 段名,不能在函數體內聲明,必須在定義和使用前聲明,#pragma可以阻止對未 調用的函數的優(yōu)化3、連接命令文件(CMD)1 MEMORY指定存儲空間MEMORYPAGE 0:name 0 fattr : origin 二 constant, length 二 constant PAGE n:name n attr : origin = constant, length = constant )
7、PAGE n:標示存儲空間,n SECTIONS分配段SECTIONS( name : property,property,)name:輸出段的名稱property :輸出段的屬性:load = allocation (強制地址或存儲空間名稱)同allocation :定義輸出段將會 被裝載到哪里。run= allocation (強制地址或存儲空間名稱)同allocation :定義輸出段將會在 哪里運行。注:CMD文件中只出現一個關鍵字load或run時,表示兩者的地址時表示兩 者的地址時重合的。PAGE = n,段位于那個存儲頁面空間。例:ramfuncs : LOAD = FLASHD
8、,RUN = RAMLO,LOAD_ST ART (_RamfuncsLoadStart,LOAD_END(_RamfuncsLoadEnd,RUN_START (_RamfuncsRunStart,PAGE= 03直接寫編譯命令1 rts2800_ml.lib 連接系統(tǒng)文件 rts2800_ml.libo filename.out最終生成的二進制文件命名為filename.outm filename.map 生成映射文件 filename.mapstack 0 x200 堆棧為 512 字4、.const 段:由關鍵字const限定的全局變量(const限定的局部變量不產生)初始化值,和 出
9、現在表達式(做指針使用,而用來初始化字符串數組變量不產生)中的字符串常 數,另外數組和結構體是局部變量時,其初始值會產生.const段,而全局時不產 生。DSP的CMD文件講解2 :CMD文件由三局部組成:(1輸入輸出定義;(2 MEMORY命令/ (3 SECTION 命令。輸入/輸出定義:這一局部,可以通過CCS的“Build Option”菜單設置o Obj鏈接的目標文件o lib鏈接的庫文件o m叩生成的交叉索引文件o out生成的可執(zhí)行代碼MEMORY命令:描述系統(tǒng)實際的硬件資源SECTION命令:描述“段”如何定位 下面給出一個例子:-C0 hello.outm hello.map
10、-stack 1001 rts2xx.libMEMORY (PAGE 0: VECT:origin=0 x8000,length 0 x040PAGE 0: PROG:origin=0 x8040,length 0 x6000PAGE 1: DATA:origin=0 x8000,length 0 x400 )SECTIONS.vextors VECT PAGE 0.text PROG PAGE 0.bss DATA PAGE 1.const DATA PAGE 1)存儲模型說明:.cinit存放程序中的變量初值和常量,const存放程序中的字符常量、浮點常量和用const聲明的常量.swit
11、ch存放程序中switch語句的跳轉地址表.text存放程序代碼.bss為程序中的全局和靜態(tài)變量保存存儲空間.far為程序中用far聲明的全局和靜態(tài)變量保存空間.stack為程序系統(tǒng)堆棧保存存儲空間,用于保存返回地址、函數間的參數傳 遞、存儲局部變量和保存中間結果.sysmem用于程序中的malloc、calloc、和realoc函數動態(tài)分配存儲空間.text 可執(zhí)行代碼一、CMD命令文件常用的偽指令1、.cint :存放已明確初始化的全局變量和靜態(tài)變量2s .const :存放已明確初始化的字符串常量、全局變量和靜態(tài)常量3、.switch :存放對于大型switch語句的跳轉表4s .tex
12、t :存放可執(zhí)行代碼和浮點數常量.bss :存放沒有初始化的全局變量和靜態(tài)變量.stack :定義軟件堆棧二、CMD命令文件內容CMD是用來分配程序存儲器空間rom和數據存儲器空間ram的,告訴鏈接程 序怎樣計算地址和分配空間。不同的芯片有不同大小的rom和ram,放用戶程序 的地方也不盡相同,所以要根據DSP的存儲器的地址范圍來編寫。分兩局部: MEMORY 和 SECTIONS.1、MEMORY是用來指定芯片的rom和ram的大小和劃分出幾個區(qū)間。MEMORY PAGE 0 : namel(attr: origin二constant, length=constant;PAGE 1 : na
13、men(attr: origin二constant, length二constant;PAGE 0對應rom , PAGE 1對應ram o PAGE里包含的區(qū)間名字與其后面的 參數反映了該區(qū)間的起始地址和長度。name存儲器名稱,同一頁上的存儲器名稱 不能相同,不同頁上的可以相同。attr存儲區(qū)的屬性,未規(guī)定的可以有R (只 讀)、W (只寫)、X (存儲器可以包含可執(zhí)行代碼)、I (存儲器可以被初始 化)。2、Section塊用來控制段的構成與地址分配。對于不同的系統(tǒng)配置,Section的 分配方式也不相同,鏈接器通過Section來控制地址的分配,所以Section的分配成 了配置 d文
14、件的重要環(huán)節(jié)。SECTIONS.vectors : VECS PAGE 0.reset: VECS PAGE 0它分成兩個基本的局部:(1)被初始化的Section (包含數據表和可執(zhí)行代碼).text :它包含所有的可執(zhí)行代碼和常數,必須放在程序頁.cinit :它包含初始化的變量和常量表,要求放在程序頁,pinit :它包括全局構造器(C+)初始化的變量表,要求放在程序頁.const :它包括字符串、聲明、以及被明確初始化過的全局和靜態(tài)變量,要求 放在低地址數據頁。.econst:是在使用大存儲器模式時使用的,包括字符串、聲明、以及被明確初 始化過的全局變量和靜態(tài)變量,可以在數據頁的任何地
15、方。.switch :它包括為轉換聲明設置的表格,可以放在程序頁,也可以放在低地址 的數據頁。(2)未被初始化的Section(為程序運行中創(chuàng)立和存放的變量在存儲器中保存 空間.bss :它為全局變量和靜態(tài)變量保存空間.在程序開始運行時,C導入路徑把數 據從.cinit節(jié)復制出去然后存在.bss節(jié)中.要求放在低地址的數據頁.ebbs :它是在遠訪問(C和大存儲器模式下使用,它為全局變量和靜態(tài)變量保存 空間.在程序開始運行時,c導入路徑把數據從.cinit段復制出去然后存在.ebss節(jié) 中??梢源娣旁跀祿摰娜魏蔚胤健?stack :為C系統(tǒng)堆棧保存空間,這局部存儲器為用來將聲明傳給函數及為局
16、部變量留出空間。要求放在低地址的數據頁。.system :動態(tài)存儲器分配保存空間,這個空間用于malloc函數,如果不使用 malloc函數,這個段的大小就是0。要求放在低地址的數據頁。.esystem :動態(tài)存儲器分配保存空間,這個空間用于外部malloc函數,如果不 使用外部malloc函數,這個段的大小就是0??梢卜旁跀祿摰娜魏蔚胤絜g:命令文件例如MEMORY(PAGE 0: VECS: origin = OOOOOh, length = 00040h 程序復位PVECS: origin = 00040h, length = 00070h /夕卜圍模塊中斷向量 PROG: origi
17、n 二 OOObOh, length = 07F50h /片上 FlashPAGE 1: BO: origin = 00200h, length = OOlOOh /DRAM BO 塊 Bl: origin = 00300h, length = OOlOOh /DRAM Bl 塊B2: origin = 00060h, length = 00020h /DRAM B2 塊SARAM: origin = 00800h, length = 00800h /SRAM 塊EXT : origin = 08000h, length = 08000h /外部存儲器SECTIONS.vectors : VE
18、CS PAGE 0.reset: VECS PAGE 0eg:MEMORY(PAGE 0:VECS :origin = OOOOOh, length = 00040hLOW :origin = 00040h, length = 03FC0hSARAM :origin = 04000h, length = 00800hBO :origin 二 OFFOOh, length = 001 OOhPAGE 1:BO :origin = 00200h, length = 001 OOhBl :origin = 00300h, length = 001 OOhB2 :origin = 00060h, le
19、ngth = 00020h.reset: VECS PAGE 0 復位中斷向量.vectors : VECS PAGE 0 中斷向量表.pvecs : PVECS PAGE 0 外圍模塊中斷向量表.text: PROG PAGE 0 /代碼.cinit: PROG PAGE 0.bss : SARAM PAGE 1 塊 B2.const: SARAM PAGE 1 塊 B2.stack : B1 PAGE 1 /堆棧,40個單元)DSP的CMD文件寫法綜述DSP的存儲器的地址范圍,CMD是主要是根據那個來編的。CMD它是用來分配rom和ram空間用的,告訴鏈接程序怎樣計算地址和分配 空間.所以
20、不同的芯片就有不同大小的rom和ram.放用戶程序的地方也不盡相同.所 以要根據芯片進行修改.分兩局部.MEMORY和SECTIONS.PAGE 0PAGE 1SECTIONSSECTIONS(.vectors.reset是用來指定芯片的rom和ram的大小和劃分出幾個區(qū)間.PAGE 0 對應 rom;PAGE 1 對應 ramPAGE里包含的區(qū)間名字與其后面的參數反映了該區(qū)間的起始地址和長度.SECTIONS :(在程序里添加下面的段名如.vectors.用來指定該段名以下,另一 個段名以上的程序(屬于PAGE0或數據(屬于PAGE1放到“”符號后的空間名字所 在的地方。SECTIONS.v
21、ectors : VECS PAGE 0 /* Interrupt vector table */.reset: VECS PAGE 0 /* Reset code */eg:PAGE 0: VECS: origin = OOOOOh, length = 00040h LOW: origin = 00040h, length 二 03FC0h SARAM: origin = 04000h, length = 00800h BO: origin = OFFOOh, length = OOlOOhPAGE 1: BO: origin = 00200h, length = 001 OOh Bl: o
22、rigin = 00300h, length = 001 OOh B2: origin = 00060h, length = 00020h SARAM: origin = 08000h, length 二 00800h SECTIONS(,text: LOW PAGE 0.cinit: LOW PAGE 0.: LOW PAGE 0.const: SARAM PAGE 1.data : SARAM PAGE 1.bss : SARAM PAGE 1.stack : SARAM PAGE 1.sysmem : SARAM PAGE 1SARAM :origin = 08000h, length
23、= 00800h)(.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 : SARAM PAGE 1)由三局部組成:輸入/輸出定義:這一局部,可以通過CCS的“Build Option.”菜單設 置:Qbj(鏈接的目標文件、.lib(鏈接的庫文件、.m叩(生成的交叉索引文 件、.out(生成的可執(zhí)行代碼。MEMORY命令:描述系統(tǒng)實際的硬件資源SECTION命令
24、:描述“段”如何定位例子: d文件-co hello.outm hello.mapstack 100-1 rts2xx.libMEMORY (PAGE 0: VECT:origin=0 x8000,length 0 x040PAGE 0: PROG:origin=0 x8040,length 0 x6000PAGE 1: DATA:origin=0 x8000,length 0 x400)SECTIONS(.vextors VECT PAGE 0.text PROG PAGE 0.bss DATA PAGE 1.const DATA PAGE 1存儲模型:C程序的代碼和數據如何定位系統(tǒng)定義:.
25、cinit存放程序中的變量初值和常量,const存放程序中的字符常量、浮點常量和用const聲明的常量.switch存放程 序中switch語句的跳轉地址表.text存放程序代碼.bss為程序中的全局和靜態(tài)變量保存存儲空間.far為程序中用far聲明的全局和靜態(tài)變量保存空間.stack為程序系統(tǒng)堆棧保存存儲空間,用于保存返回地址、函數間的參數傳 遞、存儲局部變量和保存中間結果.sysmem用于程序中的malloc、calloc、和realoc函數動態(tài)分配存儲空間CMD的專業(yè)名稱叫鏈接器配置文件,是存放鏈接器的配置信息的,我們簡稱 為命令文件,其中比擬關鍵的就是MEMORY和SECTIONS兩個
26、偽指令的使用, 常常令人困惑,系統(tǒng)出現的問題也經常與它們的不當使用有關。CCS是DSP軟件 對DOS系統(tǒng)繼承的開發(fā)環(huán)境,CCS的命令文件經過DOS命令文件長時間的引申 開展,已經變得非常簡潔(不知道TI文檔有沒有詳細CMD配置說明)。我學 CMD是從DOS里的東西開始的,所以也從DOS環(huán)境下的CMD說起:1、命令文件的組成命令文件的開頭局部是要鏈接的各個子目標文件的名字,這樣鏈接器就可以根 據子目標文件名,將相應的目標文件鏈接成一個文件;接下來就是鏈接器的操作指 令,這些指令用來配置鏈接器,接下來就是MEMORY和SECTIONS兩個偽指令 的相關語句,必須大寫。MEMORY ,用來配置目標存
27、儲器,SECTIONS用來指定段的存放位置。結合下面的典型DOS環(huán)境的命令文件link d來做一下說明: file.obj 子目標文件名1file2.obj子目標文件名2flle3.obj 子目標文件名3-0 prog.out 連接器操作指令,用來指定輸出文件-m prog.m 用來指定MAP文件MEMORY略SECTIONS略otherlink d本命令文件link d要調用的otherlink d等其他命令文件,那么文件的名字 要放到本命令文件最后一行,因為放開頭的話,鏈接器是不會從被調用的其他命令 文件中返回到本命令文件。2、MEMORY偽才旨令MEMORY用來建立目標存儲器的模型,SE
28、CTIONS指令就可以根據這個模型 來安排各個段的位置,MEMORY指令可以定義目標系統(tǒng)的各種類型的存儲器及容 量。MEMORY的語法如下:MEMORYPAGE 0 :namel(attr : origin = constant,length 二 constantnameln(attr : origin = constant,length = constant PAGE 1 : name2(attr : origin 二 constant,length 二 constantname2n(attr : origin = constant,length = constant PAGE n : na
29、men(attr : origin = constant,length = constantnamenn(attr : origin = constant,length = constant PAGE關鍵詞對獨立的存儲空間進行標記,頁號n的最大值為255,實際應用 中一般分為兩頁,PAGE0程序存儲器和PAGE1數據存儲器。name存儲區(qū)間的名 字,不超過8個字符,不同的PAGE上可以出現相同的名字(最好不用,免的搞 混),一個PAGE內不許有相同的name。attr的屬性標識,為R表示可讀;W可 寫X表示區(qū)間可以裝入可執(zhí)行代碼;I表示存儲器可以進行初始話,什么屬性代碼 也不寫,表示存儲區(qū)間具
30、有上述的四種屬性,基本上我們都選擇這種寫法。origin: 略。length:略。下面是經常用的2407的簡單寫法大家參考,程序從0 x060開始,要避開加密 位,不從0 x0044開始更可靠一點,此例中的同名的頁可以只寫第一個,其后省 略,但寫上至少平安一點: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: Bl : origin = 0 x300,
31、length Ox 100PAGE 1: DATA: origin = 0 x0860, length 0 x0780)3、 SECTIONS 偽指令SECTIONS指令的語法如下:SECTIONS(.text: 所有.text輸入段名 load=加載地址run =運行地址.data: 所有.data輸入 段名 load=加載地址run =運行地址.bss: 所有.bss輸入段名 load=加載地址run =運行地址.other: 所有.other輸入段名 load =加載地址run =運行地址SECTIONS必須用大寫字母,其后的大括號里是輸出段的說明性語句,每一 個輸出段的說明都是從段名開始,段名之后是如何對輸入段進行組織和給段分配存 儲器的參數說明:以.text段的屬性語句為例,”所有.text輸入段名
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計意義
- 運輸統(tǒng)計與分析課程設計
- 教育行業(yè)中的小紅書電商模式實踐
- 2025年12月企業(yè)安全工作總結樣本(二篇)
- 2025年9月銷售員工作總結模版(二篇)
- 2025年上半年度總結模版(五篇)
- 2025年業(yè)務員個人工作總結參考模板(二篇)
- 高處作業(yè)安全技術規(guī)程(4篇)
- 2025年4月小學教師月工作總結范文(二篇)
- 2025年9月高三班主任新學期教學工作總結范文(二篇)
- GB/T 3324-2024木家具通用技術條件
- NGS二代測序培訓
- 《材料合成與制備技術》課程教學大綱(材料化學專業(yè))
- 小紅書食用農產品承諾書示例
- 釘釘OA辦公系統(tǒng)操作流程培訓
- 新生兒科年度護理質控總結
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 《工貿企業(yè)有限空間作業(yè)安全規(guī)定》知識培訓
- 高層次人才座談會發(fā)言稿
- 垃圾清運公司管理制度(人員、車輛、質量監(jiān)督、會計管理制度)
- 《建筑工程設計文件編制深度規(guī)定》(2022年版)
評論
0/150
提交評論