http://blog.csdn.net/u011392772/article/details/49760897函數
gel文件中主要包含了PLL、DDR等的初始化工做,具體能夠看一下gel源碼就明白了;CMD主要是用於定義內存的劃分,及數據、代碼等的存放位置。工具
cmd小技巧:ui
CMD主要是用來分配rom和ram空間用的,它告訴連接程序怎樣計算地址和分配空間.因此不一樣的芯片就有不一樣大小的rom和ram.放用戶程序的地方也不盡相同.因此要根據芯片進行修改.分兩部分.MEMORY和SECTIONS.spa
MEMORY是用來指定芯片的rom和ram的大小和劃分出幾個區間..net
MEMORYblog
{索引
PAGE 0 ... ROM
PAGE 1.... RAM
}內存
(`PAGE裏包含的區間名字與其後面的參數反映了該區間的起始地址和長度.)ci
SECTIONS
{
.vectors .................
.reset .................
................
}資源
SECTIONS:在程序裏添加段名.XXXX(如.vectors.)用來指定該段名如下,另外一個段名以上的程序(屬於PAGE0)或數據(屬於PAGE1)放到「>」符號後的空間名字所在的地方。下面給出一個簡單的例子:
MEMORY
{
PAGE 0: VECS: origin = 00000h, length = 00040h
LOW: origin = 00040h, length = 03FC0h
SARAM: origin = 04000h, length = 00800h
B0: origin = 0FF00h, length = 00100h
PAGE 1: B0: origin = 00200h, length = 00100h
B1: origin = 00300h, length = 00100h
B2: origin = 00060h, length = 00020h
SARAM: origin = 08000h, length = 00800h
}
SECTIONS
{
.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
}
CMD文件由三部分組成:(1) 輸入輸出定義;(2) MEMORY命令;(3) SECTION命令。
輸入/輸出定義:這一部分,能夠經過ccs的「Build Option........」菜單設置
。obj 連接的目標文件
。lib 連接的庫文件
。map 生成的交叉索引文件
。out 生成的可執行代碼
MEMORY命令:描述系統實際的硬件資源
SECTION命令:描述「段」如何定位
下面給出一個例子:
-c
-o hello.out
-m hello.map
-stack 100
-l rts2xx.lib
MEMORY
{
PAGE 0: VECT:origin=0x8000,length 0x040
PAGE 0: PROG:origin=0x8040,length 0x6000
PAGE 1: DATA:origin=0x8000,length 0x400
}
SECTIONS
{
.vextors >VECT PAGE 0
.text >PROG PAGE 0
.bss >DATA PAGE 1
.const >DATA PAGE 1
}
存儲模型說明:
.cinit 存放程序中的變量初值和常量
.const 存放程序中的字符常量、浮點常量和用const聲明的常量
.switch 存放程序中switch語句的跳轉地址表
.text 存放程序代碼
.bss 爲程序中的全局和靜態變量保留存儲空間
.far 爲程序中用far聲明的全局和靜態變量保留空間
.stack 爲程序系統堆棧保留存儲空間,用於保存返回地址、函數間的參數傳遞、存儲局部變量和保存中間結果
.sysmem 用於程序中的malloc 、calloc 、和realoc 函數動態分配存儲空間.text可執行代碼