DSP 5509 CMD文件編寫

 

在DSP系統中,存在大量、各式各樣的存儲器,CMD文件所描述的,就是開發工程師對物理存儲器的管理、分配和使用情況。CMD全稱鏈接器配置文件,是存放鏈接器配置信息的,簡稱命令文件,有三部分組成分別爲:輸入/輸出定義、memory命令、SECTIONS命令。

  1. 、輸入/輸出定義:

.obj文件:鏈接器要鏈接的目標文件;

.lib文件:鏈接器要鏈接的庫文件;

.map文件:鏈接器生成的交叉索引文件;

.out文件:鏈接器生成的可執行代碼;

 

  1. 、MEMORY命令

描述系統實際的硬件資源,無論DSP芯片自帶還是用戶外擴的,凡是可以使用的、需要用到的存儲器和空間,用戶都要一一聲明出來:有哪些存儲器,它們的位置和大小。

僞指令:

PAGE關鍵詞:對獨立的存儲空間進行標記,頁號n的最大值爲255。實際應用中一般分爲兩頁:PAGE0程序存儲器好PAGE1數據存儲器。

name:存儲區間的名字,不超過8個字符,不同的PAGE上可以出現相同的名字,一個PAGE內不許有相同的name。

origin:空間的起始地址。

length:空間的數據長度

  1. 、SECTIONS命令

描述段如何定位。

.vectors:中斷向量表

.cinit:存放C程序中的變量初值和常量;

.const:存放C程序中的字符常量、浮點常量和用const聲明的常量;

.switch:存放C程序中的switch語句的跳幀表;

.text:存放C程序的代碼;

.bss:存放C程序中的全局和靜態變量保留存儲空間;

.far:爲C程序用far聲明的全局和靜態變量保留空間;

.stack:爲C程序系統堆棧保留存儲空間,用於保存返回空間、函數間的參數傳遞、存儲局部變量和中間結果。

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

 

其實在寫.CMD文件主要就是告訴DSP:程序放哪,數據放哪,堆棧放哪、中斷向量放哪。

例:

 

/*-w

-stack 500

-sysstack 500

-l rts55x.lib

-heap 102400

*/

-heap 81920 /*100KB=102400 sysmem動態分配的內存大小*/

 

MEMORY

{

    PAGE 0:

 

        MMR         : origin = 0000000h, length = 00000c0h

        SPRAM       : origin = 00000c0h, length = 0000040h

        VECS        : origin = 0000100h, length = 0000100h

        SARAM0      : origin = 0010100h, length = 0000F00h

        SARAM1      : origin = 0011000h, length = 0007000h

        DARAMBOOT0  : origin = 0000300h, length = 0001400h /*一次加載用的內存*/

        SARAM2     : origin = 0018000h, length = 0004000h

        SARAM3     : origin = 001c000h, length = 0004000h

        DARAM3     : origin = 000c000h, length = 0004000h

 

   PAGE 1:

        DARAMBOOT1 : origin = 0001700h, length = 0001400h  /*二次加載用的內存*/

        DARAM0     : origin = 0002B00h, length = 0001200h                 

        DARAM00    : origin = 0003D00h, length = 0000100h

        DARAM01    : origin = 0003E00h, length = 0000100h

        DARAM02    : origin = 0003F00h, length = 0000100h

        DARAM03    : origin = 0004000h, length = 0000100h

        DARAM1     : origin = 0004100h, length = 0003F00h

        DARAM2     : origin = 0008000h, length = 0004000h

       /* DARAM3     : origin = 000c000h, length = 0004000h

        SARAM2     : origin = 0018000h, length = 0004000h

        SARAM3     : origin = 001c000h, length = 0004000h*/

        SARAM4     : origin = 0020000h, length = 0020000h

       

        SARAM12    : origin = 0040000h, length = 0004000h

        SARAM13    : origin = 0044000h, length = 0004000h

        SARAM14    : origin = 0048000h, length = 0004000h

        SARAM15    : origin = 004c000h, length = 0004000h

       

        CE0        : origin = 0050000h, length = 03b0000h

        CE1        : origin = 0400000h, length = 0400000h

        CE2        : origin = 0800000h, length = 0400000h

        CE3        : origin = 0c00000h, length = 03f8000h

       

        PDROM      : origin = 0ff8000h, length = 07f00h

        /*   VECS       : origin = 0ffff00h, length = 00100h */ /* reset vector */

}      

 

 

SECTIONS

{

        .vectors  : {} > VECS   PAGE 0  /* interrupt vector table */

        .cinit    : {} > SARAM0 PAGE 0

        .text     : {} > SARAM1 PAGE 0       

 

        .stack    : {} > DARAM0 PAGE 1

        .sysstack : {} > DARAM0 PAGE 1

        .sysmem   : {} > SARAM4 PAGE 1

        .cio      : {} > DARAM1 PAGE 1

        .data     : {} > DARAM1 PAGE 1

        .bss      : {} > DARAM1 PAGE 1 

        .const    : {} > DARAM1 PAGE 1

                 

        .csldata  : {} > DARAM0 PAGE 1

        .mybuffer : {} > SARAM4 PAGE 1

             .mybuffer1: {} > DARAM2 PAGE 1

             .hpiEventbuff: {} > DARAM00 PAGE 1

             .hpiRecvbuff : {} > DARAM01 PAGE 1

        .hpiSendbuff : {} > DARAM02 PAGE 1

        .hpiDebugbuff: {} > DARAM03 PAGE 1

 

 

        .fftcode : {} > SARAM2 PAGE 0                  /* FFT-specific sections  */ 

        .twiddle : {} > SARAM3 PAGE 0, align(2048)

        .input   : {} > DARAM3 PAGE 0, align(4)  /* this is due to long-word data memory access */

}

 

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