DSP中的cmd文件


一、CMD文件

鏈接命令文件(Link Command Files),以后綴.cmd結尾,簡稱CMD文件。

CMD文件的兩大功能是指示存儲空間和分配段到存儲空間。

在編寫CMD文件時,主要采用MEMORY和SECTIONS 兩條偽指令。

在281x調試時,可以將程序代碼鏈接到Flash或者RAM,因此對應兩種CMD文件。

 

MEMORY偽指令

作用:指示存儲空間。

語法如下:

MEMORY

{

PAGE 0 : name 0[(attr)]:origin = constant, length = constant

PAGE n : name n[(attr)]:origin = constant, length = constant

}

PAGE:用來指示存儲空間的關鍵字。PAGE n的最大值為255。

name:代表某一屬性和地址范圍的存儲空間名稱。長度可以是1~8個字符,在同一頁內名稱不能相同,不同頁內名稱可以相同。

attr:用來規定存儲空間的屬性,共有四種屬性:R-只讀、W-只寫、X-該空間包含可執行代碼、I-該空間可以被初始化。實際使用,常忽略此選項。

orgin:用來定義存儲空間起始地址的關鍵字。

length:用來定義存儲空間長度的關鍵字。

 

舉例

MEMORY 

{

PAGE 0 :

FLASH : origin = 0x3D8000, length = 0x01FF80 /* FLASH */

BEGIN : origin = 0x3F7FF6, length = 0x000002

ROM : origin = 0x3FF000, length = 0x000FC0

RESET : origin = 0x3FFFC0, length = 0x000002

RAML0 : origin = 0x008000, length = 0x001000 

PAGE 1 : 

RAMM0 : origin = 0x000000, length= 0x000400 /* RAM M0 */

RAMM1 : origin = 0x000400, length= 0x000400 /* RAM M1 */

RAML1 : origin = 0x009000, length = 0x001000 /* RAM L1 */

RAMH0 : origin = 0x3F8000, length= 0x002000 /* RAM H0 */

}

 

SECTIONS偽指令

作用:分配段到存儲空間,也就是指定段的實際硬件地址空間。

語法如下:

SECTIONS

{

name 0 : > 存儲空間名稱, PAGE = 頁數

name n : > 存儲空間名稱, PAGE = 頁數

}

name :編譯器輸出段的名稱。

存儲空間名稱:采用MEMORY偽指令指示的存儲器空間名稱。

PAGE :前面存儲器空間名稱對應的存儲器頁。

 

舉例

SECTIONS

{

.cinit : > FLASH, PAGE = 0

.text : > FLASH, PAGE = 0

.const : > FLASH, PAGE = 0

.econst : > FLASH, PAGE = 0 

.stack : > RAMM0, PAGE = 1

.bss : > RAML1, PAGE = 1

.ebss : > RAML1, PAGE = 1

}

 

二、C28x存儲器模型

存儲器模型:TMS320C28x將存儲器分成程序和數據兩個線性塊。

程序存儲器:包含可執行代碼,初始化數據和開關量;

數據存儲器:包含外部變量、靜態變量和系統堆棧。

  編譯器產生可重定位的代碼和數據塊,允許鏈接器將代碼和數據分配到適當的存儲器空間,而鏈接器則根據鏈接命令文件將代碼和數據分配到目標存儲器。這些代碼和數據塊,稱為sections(段),有兩種基本的sections類型,為初始化段和非初始化段。

 

初始化段

初始化段包含數據表和可執行代碼。C編譯器創建如下初始化段:

.text段:包含所有可執行代碼和常量;

.cint段:已初始化的變量和常量表(用於C程序);

.pint段:已初始化的變量和常量表(用於C++程序);

.const段:包含字符串常數以及用const聲明的全局和靜態變量;

.econst段:同.const段,但用far const聲明的變量或編譯器采用大存儲器模式時;

.switch段:為開關語句(switch)建立的數據表。

 

未初始化段

  未初始化段在存儲器(通常是RAM)中保留空間,程序在運行時可在此空間創建和存儲變量。C編譯器創建如下非初始化塊:

.bss段:為全局和靜態變量保留空間。程序引導過程中,C引導程序會將ROM中的.cint塊中的數據復制到.bss塊中;

.ebss段:為用far聲明的或大存儲器模式下的全局和靜態變量保留空間。程序引導過程中,C引導程序會將ROM中的.cint塊中的數據復制到.bss塊中;

.stack段:為C系統的堆棧分配的空間,用於函數調用時傳遞參數以及為局部變量分配空間;

.sysmem段:為動態存儲器分配保留空間,如果未用到malloc函數,則該塊的空間為0;

.esysmem段:為動態存儲器分配保留空間,如果未用到far malloc 函數,則該塊的空間為0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM