DSP中CMD文件理解

CMD的名稱爲鏈接命令文件(Linker Command Files),用來存放鏈接的配置信息,簡稱命令文件,CMD由三大部分組成:1、輸入輸出定義,2、MEMORY命令,3、SECTION命令

1、輸入輸出的定義:通過ccs的“BuildOption”菜單設置:.obj(鏈接的目標文件)、.lib(鏈接的庫文件)、.map(生成的交叉索引文件)、.out(生成的可執行代碼)。

2、默認C6678的CMD文件在F:\ProgramFiles\ti\ccsv8\ccs_base\c6000\include路徑下面,也可以添加插件開發的CMD文件F:\ProgramFiles\ti\pdk_c667x_2_0_9\packages\ti\platform\evmc6678l\platform_test,打開platform_utils.cmd文件:

-heap:定義堆的大小,編譯器提供的運行時支持庫的一些函數(如malloc/calloc/realloc),允許運行時爲變量動態分配存儲器。這些存儲器就放置在.system段的全局池(global pool)或堆(heap)中。這個動態存儲池的大小僅僅受限與系統中實際的存儲容量。

-stack:定義棧的大小,稱系統棧(system stack),用於:1、保存函數調用後的返回地址;2、給局部變量分配存儲空間;3、傳遞函數參數;4、保存臨時結果;

以上2個選項都可以在project-build options的連接器選項中設置

3、MEMORY命令:描述系統的實際硬件資源,MEMORY是用來指定芯片的ROM和RAM的大小和劃分出幾個區間。PAGE0對應ROM,PAGE1對應RAM。PAGE裏包含的區間名字與其後面的參數反映了該區間的起始地址和長度。

以上的L1PSRAM表示的段或者塊的稱號,它的起始地址爲:0x0E00000,長度爲0x7FFF。

MEMORY
{
PAGE0:name1[(attr)]:origin=constant,length=constant
name1n[(attr)]:origin=constant,length=constant
PAGE1:name2[(attr)]:origin=constant,length=constant
name2n[(attr)]:origin=constant,length=constant
PAGEn:namen[(attr)]:origin=constant,length=constant
namenn[(attr)]:origin=constant,length=constant
}

PAGE關鍵詞對獨立的存儲空間進行標記,PAGE的最大值爲255,實際應用中一般分爲兩頁,PAGE0程序存儲器和PAGE1數據存
儲器。name存儲區間的名字,不超過8個字符,不同的PAGE上可以出現相同的名字(最好不用,免的搞混),一個PAGE內不許有相同的name。attr的屬性標識,爲R表示可讀;W可寫;X表示區間可以裝入可執行代碼;I表示存儲器可以進行初始話,什麼屬性代碼也不寫,表示存儲區間具有上述的四種屬性,基本上我們都選擇這種寫法。

例:

MEMORY
{
   PAGE 0: VECT:origin=0x8000,length=0x040
   PAGE 0: VECT:origin=0x8040,length=0x600
   PAGE 1: DATA:origin=0x8000,length=0x400

}

PAGE一般設置爲0到1,分別爲程序存儲器和數據存儲器的地址分配,VECT、DATA爲塊的名稱,VECT表示程序存儲器,DATA表示數據存儲器,具有以上4種屬性,origin表示起始地址,length表示長度。後面也可以加上 F=0x0000或fill=0x0000,表示初始化該段內存中的值。

 

4、SECTION命令:用來詳細描述‘段’如何定位。

SECTIONS
{
    .vextors >VECT PAGE 0
    .text >PROG PAGE 0
    .bss >DATA PAGE 1
    .const >DATA PAGE 1
}

.vextors、.text、.bss 、 .const表示段名,.vextors >VECT PAGE 0表示vextors段下的程序放在VECT PAGE0的地址下面。若後面加上Align=32768表示對齊在第32768個字節地址處。

以下是其他常用段名:

.cinit 存放程序中的變量初值和常量
.const 存放程序中的字符常量、浮點常量和用const聲明的常量
.switch 存放程序中switch語句的跳轉地址表
.text 存放程序代碼
.bss 爲程序中的全局和靜態變量保留存儲空間
.far 爲程序中用far聲明的全局和靜態變量保留空間
.stack 爲程序系統堆棧保留存儲空間,用於保存返回地址、函數間的參數傳遞、存儲局部變量和保存中間結果

.sysmem 用於程序中的malloc 、calloc 、和realoc 函數動態分配存儲空間

.text爲可執行代碼

SECTION目標文件中的最小單位爲塊,一個塊就是最終在存儲器映像中佔據連續空間的一段代碼或者數據。

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章