硬件平台: TMS320F28377D

软件版本: CSS 7.3


cmd文件说明:cmd文件主要是用于定位代码及数据的地址;

MEMRORY
定义各区域(名称)的起始地址及大小,然后在SECTIONS中使用;
必须与芯片实际情况相符(重要)。

MEMORY
{
    PAGE 0:    // PAGE0为ROM

            ........

    PAGE 1:    // PAGE1为RAM
        ADCA  : origin = 0x007400, length = 0x000080
        ADCB  : origin = 0x007480, length = 0x000080
        ADCC  : origin = 0x007500, length = 0x000080
        ADCD  : origin = 0x007580, length = 0x000080
}

SECTIONS
指明代码/数据的具体位置;

.text 代码段(必须定义)
.data(必须定义)
.bss 全局变量/静态变量(必须定义)

.stack 指定堆栈位置,不可用GS内存
.esystem 动态内存分配段
.econst 常量

LOAD:指明加载的位置
LOAD = 0x000000 定位到指定的地址
LOAD>ROM 定位到指定名称(MEMRORY中定义的)的存储区,可以简写为>
AdcaRegsFile : > ADCA, PAGE = 1

SECTIONS
{
    AdcaRegsFile : > ADCA, PAGE = 1
}

一个工程可以有多个cmd文件,只要不冲突即可,TI的例程中BIOS.cmd就是定义寄存器级的,所有工程可以共用;


代码地址定位:

#pragma CODE_SECTION(InitFlash, "ranfuncs");

第一个参数是函数名称;
第二个参数是SECTIONS中定义位置;

数据地址定位:

#pragma DATA_SECTION(AdcaRegs, "AdcaRegsFile");
volatile struct ADC_REGS AdcaRegs;

第一个参数为变量名称;
第二个参数是在SECTIONS中定义的字段名称;


基于RAM运行例程:

存储器详细信息参考数据手册 6.3.1 Memory章节
GS 128KB(64KW = 4KW * 16) Global Shared RAM
LS 24KB(12KW = 2KW * 2) Local Shared RAM (CPU与CLA都可以访问)

M0/M1 1KW * 2 Dedicated RAM(仅CPU可以访问)
D0/D1 2KW * 2 Dedicated RAM(仅CPU可以访问)

MEMORY
{
PAGE 0 :    /* ROM */

   /* BEGIN 用于从SARAM引导模式 */    
   BEGIN     : origin = 0x000000, length = 0x000002

   /* CPU直接访问内存 */
   RAMM0     : origin = 0x000122, length = 0x0002DE
   RAMD0     : origin = 0x00B000, length = 0x000800

   /* 全局共享RAM(共64KW) 32KW 用于ROM */
   RAMGS0      : origin = 0x00C000, length = 0x001000
   RAMGS1      : origin = 0x00D000, length = 0x001000
   RAMGS2      : origin = 0x00E000, length = 0x001000
   RAMGS3      : origin = 0x00F000, length = 0x001000
   RAMGS4      : origin = 0x010000, length = 0x001000
   RAMGS5      : origin = 0x011000, length = 0x001000
   RAMGS6      : origin = 0x012000, length = 0x001000
   RAMGS7      : origin = 0x013000, length = 0x001000

   RESET:      : origin = 0x3FFFC0, length = 0x000002

PAGE 1 :    // RAM

   BOOT_RSVD       : origin = 0x000002, length = 0x000120     /* Part of M0, BOOT rom will use this for stack */
   RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
   RAMD1           : origin = 0x00B800, length = 0x000800
     
   /* 本地共享RAM 共12KW = 2KW*6 */
   RAMLS0    : origin = 0x008000, length = 0x000800
   RAMLS1    : origin = 0x008800, length = 0x000800
   RAMLS2    : origin = 0x009000, length = 0x000800
   RAMLS3    : origin = 0x009800, length = 0x000800
   RAMLS4    : origin = 0x00A000, length = 0x000800
   RAMLS5    : origin = 0x00A800, length = 0x000800

   /* 全局共享RAM(共64KW) 32KW 用于RAM */
   RAMGS8      : origin = 0x014000, length = 0x001000
   RAMGS9      : origin = 0x015000, length = 0x001000
   RAMGS10     : origin = 0x016000, length = 0x001000
   RAMGS11     : origin = 0x017000, length = 0x001000
   RAMGS12     : origin = 0x016000, length = 0x001000
   RAMGS13     : origin = 0x017000, length = 0x001000
   RAMGS14     : origin = 0x016000, length = 0x001000
   RAMGS15     : origin = 0x017000, length = 0x001000
   
   CANA_MSG_RAM     : origin = 0x049000, length = 0x000800 
   CANB_MSG_RAM     : origin = 0x04B000, length = 0x000800   
}


SECTIONS
{
   codestart        : > BEGIN,     PAGE = 0
   ramfuncs         : > RAMM0      PAGE = 0

   .text            : >>RAMM0 | RAMD0 |  RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7,   PAGE = 0
   .cinit           : > RAMM0,     PAGE = 0
   .pinit           : > RAMM0,     PAGE = 0
   .switch          : > RAMM0,     PAGE = 0
   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
/*---------------------------------------------------*/    
   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > RAMLS5,    PAGE = 1
   .econst          : > RAMLS5,    PAGE = 1
   .esysmem         : > RAMLS5,    PAGE = 1

   ramgs0           : > RAMGS8,    PAGE = 1
   ramgs1           : > RAMGS9,    PAGE = 1

#ifdef __TI_COMPILER_VERSION
   #if __TI_COMPILER_VERSION >= 15009000
    .TI.ramfunc : {} > RAMM0,      PAGE = 0
   #endif
#endif
   
   /* The following section definitions are for SDFM examples */        
   Filter1_RegsFile : > RAMGS10,    PAGE = 1, fill=0x1111
   Filter2_RegsFile : > RAMGS11,    PAGE = 1, fill=0x2222
   Filter3_RegsFile : > RAMGS12,    PAGE = 1, fill=0x3333
   Filter4_RegsFile : > RAMGS13,    PAGE = 1, fill=0x4444
   Difference_RegsFile : >RAMGS14,  PAGE = 1, fill=0x3333
}