TMS320F28377D.cmd文件分析

TMS320F28377D.cmd文件分析

  1. 存储器分配

    MEMORY
    {
    PAGE 0 :	/* 程序存储区 */
        		/* BEGIN用于"引导至FLASH" bootloader模式 */
        /* Flash引导地址, 见图1.1 */
        BEGIN   : origin = 0x080000, length = 0x000002
            
        /* Flash扇区 */
        FLASHA  : origin = 0x080002, length = 0x001FFE  /* on-chip Flash */
        FLASHB  : origin = 0x082000, length = 0x002000  /* on-chip Flash */
        FLASHC  : origin = 0x084000, length = 0x002000  /* on-chip Flash */
        FLASHD  : origin = 0x086000, length = 0x002000  /* on-chip Flash */
        FLASHE  : origin = 0x088000, length = 0x008000  /* on-chip Flash */
        FLASHF  : origin = 0x090000, length = 0x008000  /* on-chip Flash */
        FLASHG  : origin = 0x098000, length = 0x008000  /* on-chip Flash */
        FLASHH  : origin = 0x0A0000, length = 0x008000  /* on-chip Flash */
        FLASHI  : origin = 0x0A8000, length = 0x008000  /* on-chip Flash */
        FLASHJ  : origin = 0x0B0000, length = 0x008000  /* on-chip Flash */
        FLASHK  : origin = 0x0B8000, length = 0x002000  /* on-chip Flash */
        FLASHL  : origin = 0x0BA000, length = 0x002000  /* on-chip Flash */
        FLASHM  : origin = 0x0BC000, length = 0x002000  /* on-chip Flash */
        FLASHN  : origin = 0x0BE000, length = 0x002000  /* on-chip Flash */
        RESET   : origin = 0x3FFFC0, length = 0x000002  /* 向量表首地址, 见图1.2 */
            
    PAGE 1 : /* 数据存储区 */
    	/* 保留0x000002 ~ 0x000122存储区域, 用作BOOT rom的栈空间 */
        BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */
    
        M01SARAM : origin = 0x000122, length = 0x0006DE  /* on-chip RAM M0的部分空间及M1全部空间 */
    
        LS05SARAM : origin = 0x008000, length = 0x003000 /* on-chip RAM LS0~LS5全部空间 CLA可访问 */
    
        /* on-chip Global shared RAMs */
        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
        RAMGS8  : origin = 0x014000, length = 0x001000
        RAMGS9  : origin = 0x015000, length = 0x001000
        RAMGS10 : origin = 0x016000, length = 0x001000
        RAMGS11 : origin = 0x017000, length = 0x001000
        RAMGS12 : origin = 0x018000, length = 0x001000
        RAMGS13 : origin = 0x019000, length = 0x001000
        RAMGS14 : origin = 0x01A000, length = 0x001000
        RAMGS15 : origin = 0x01B000, length = 0x001000
    
        /* Shared MessageRam */
        CPU2TOCPU1RAM   : origin = 0x03F800, length = 0x000400		/* CPU2发给CPU1消息用RAM */
        CPU1TOCPU2RAM   : origin = 0x03FC00, length = 0x000400		/* CPU1发给CPU2消息用RAM */
    }
    

    image-20210311105834851

    图1.1 FLASH存储器映射

    image-20210311113246764
    图1.2 C28x 存储器映射

  2. 存储器分配

    SECTIONS
    {
        /* 分配程序区域 : 
         * .cinit C语言 显式初始化的全局和静态变量表 程序区
         * .binit 
         * .pinit C++语言 全局构造函数表 程序区
         * .text 代码段
         */
        .cinit              : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
        .binit              : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
        .pinit              : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
        .text               : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
        codestart           : > BEGIN   PAGE = 0
        ramfuncs            : LOAD = FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                     FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                     FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
                              RUN  = LS05SARAM  PAGE = 1
                              LOAD_START(_RamfuncsLoadStart),
                              LOAD_SIZE(_RamfuncsLoadSize),
                              LOAD_END(_RamfuncsLoadEnd),
                              RUN_START(_RamfuncsRunStart),
                              RUN_SIZE(_RamfuncsRunSize),
                              RUN_END(_RamfuncsRunEnd)
    
    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
        .TI.ramfunc : {} LOAD = FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0,
                         RUN  = LS05SARAM PAGE = 1,
                         table(BINIT)
    #endif
    #endif
    
        /* 分配未初始化的数据区: 
         * .stack   栈                     低64K
         * .ebss    Far 全局/静态变量       数据区任意位置
         * .esysmem far_malloc函数的存储区  数据区任意位置
         * .cio     
         */
        .stack              : > M01SARAM | LS05SARAM    PAGE = 1
        .ebss               : > M01SARAM | LS05SARAM    PAGE = 1
        .esysmem            : > LS05SARAM | M01SARAM    PAGE = 1
        .cio                : > LS05SARAM | M01SARAM    PAGE = 1
    
        /* Initalized sections go in Flash 初始化在Flash中运行的区
         * .econst   Far常量               数据区任意位置
         * .switch   大型switch语句跳转表   程序则带上 -mt 选项, 数据则不可带 -mt 选项
         * .args
         * Filter_RegsFile
         * 
         */
        .econst             : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
        .switch             : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
        .args               : > FLASHA | FLASHB | FLASHC | FLASHD | FLASHE |
                                FLASHF | FLASHG | FLASHH | FLASHI | FLASHJ |
                                FLASHK | FLASHL | FLASHM | FLASHN PAGE = 0
    
        Filter_RegsFile     : > RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 |
                                RAMGS5 | RAMGS6 | RAMGS7 | RAMGS8 | RAMGS9 |
                                RAMGS10 | RAMGS11 | RAMGS12 | RAMGS13 | RAMGS14 |
                                RAMGS15 PAGE = 1
    
        /* 下面的段定义是使用IPC API驱动程序需要的
         */
        GROUP : > CPU1TOCPU2RAM, PAGE = 1
        {
            PUTBUFFER
            PUTWRITEIDX
            GETREADIDX
        }
    
        GROUP : > CPU2TOCPU1RAM, PAGE = 1
        {
            GETBUFFER :    TYPE = DSECT
            GETWRITEIDX :  TYPE = DSECT
            PUTREADIDX :   TYPE = DSECT
        }
    }
    
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值