CMD file in DSP

Source: Internet
Author: User

DSP中cmd文件

CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用。

1、命令文件的组成

命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写

 

CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间。所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同。所以要根据芯片进行修改,分为 MEMORY和SECTIONS两个部分。

MEMORY:用来指定芯片的ROM和RAM的大小和划分出几个区间PAGE 0对应ROM, PAGE 1对应RAM。PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址长度。(描述系统硬件资源)

 

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

}

 

PAGE 0 : VECS(区间名字): origin(起始地址) = 800000h , length (长度)=40h 

如应用字段名".vectors"的程序或数据将被放到vecs,vecs是page0即是rom空间00H至40H的地方

 

SECTIONS:在程序里添加下面的段名,如.vectors。用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到">"符号后的空间名字所在的地方。(描述"段"如何定位)

 

SECTIONS

{

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

.reset     :     { } > VECS PAGE 0     /* Reset code */

............

}

.vectors,.reset都是段名。加不加"."随你便,即.vectors表示名为 ".vectors"的段。

{}表示段的全部{}> VECS PAGE 0表示将段的全部放入名为 VECS PAGE 0的内存区。

 

分成两个基本的部分:
(1)被初始化的Section(包含数据表和可执行代码

.text:    它包含所有的可执行代码和常数,必须放在程序页

.cinit:    它包含初始化的变量和常量表,要求放在程序页

.pinit:    它包括全局构造器(C++)初始化的变量表,要求放在程序页

.const:    它包括字符串、声明、以及被明确初始化过的全局和静态变量,要求放在低地址数据页

.econst:    是在使用大存储器模式时使用的,包括字符串、声明、以及被明确初始化过的全局变量和静态变量,可以在数据页的任何地方。

.switch:它包括为转换声明设置的表格,可以放在程序页,也可以放在低地址的数据页。

 

(2)未被初始化的Section(为程序运行中创建和存放的变量在存储器中保留空间)

   .bss:它为全局变量和静态变量保留空间.在程序开始运行时,C导入路径把数据从.cinit节复制出去然后存在.bss节中.要求放在低地址的数据页.

   .ebbs:它是在远访问(C)和大存储器模式下使用,它为全局变量和静态变量保留空间.在程序开始运行时,C导入路径把数据从.cinit段复制出去然后存在.ebss节中。可以存放在数据页的任何地方。

   .stack:为C系统堆栈保留空间,这部分存储器为用来将声明传给函数及为局部变量留出空间。要求放在低地址的数据页。

   .system:动态存储器分配保留空间,这个空间用于malloc函数,如果不使用malloc函数,这个段的大小就是0。要求放在低地址的数据页。

   .esystem:动态存储器分配保留空间,这个空间用于外部malloc函数,如果不使用外部malloc函数,这个段的大小就是0。可也放在数据页的任何地方 

 

eg:命令文件示例
  MEMORY
  {
   PAGE 0    :     VECS: origin = 00000h, length = 00040h     //程序复位
                    PVECS: origin = 00040h, length = 00070h    //外围模块中断向量
                    PROG: origin = 000b0h, length = 07F50h    //片上Flash
   PAGE 1    :     B0: origin = 00200h, length = 00100h        //DRAM B0块
                   B1: origin = 00300h, length = 00100h       //DRAM B1块
                   B2: origin = 00060h, length = 00020h       //DRAM B2块
                   SARAM: origin = 00800h, length = 00800h    //SRAM块

                          EXT:origin = 08000h, length = 08000h      //外部存储器
  }
  SECTIONS
  {
  .reset       : { } > VECS PAGE 0         //复位中断向量
  .vectors     : { } > VECS PAGE 0   //中断向量表

      .pvecs       : { } > PVECS PAGE 0         //外围模块中断向量表
  .text         : { } > PROG PAGE 0         //代码
  .cinit     : { } > PROG PAGE 0    
      .bss         : { } > SARAM PAGE 1         //块B2
      .const     : { } > SARAM PAGE 1         //块B2
     .stack     : { } > B1     PAGE 1          //堆栈,40个单元
  }

 

 

例:

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 ALLOCATION */

/*--------------------------------------------------------------------------*/

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

}

 

系统定义:

.cinit     存放c程序中的变量初值和常量;

.const    存放c程序中的字符常量、浮点常量和用const声明的常量;

.switch    存放c程序中的switch语句的跳针表;

.text        存放c程序的代码;

.bss        为c程序中的全局和静态变量保留存储空间;

.far        为c程序中用far生命的全局和静态变量保留空间;

.stack    为c程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;

.system    用于c程序中malloc、calloc和realloc函数动态分配存储空间;

 

 

 

 

6455.cmd文件内容

 

-l rts64plus.lib

MEMORY

{

VECS:     o = 0x00800000 l = 0x00000200

BOOT:     o = 0x00800200 l = 0x00000200

L2RAM:     o = 0x00800400 l = 0x001FFC00 /* 2MB L2 Internal SRAM */

L1PRAM:     o = 0x00E00000 l = 0x00008000 /* 32kB L1 Program SRAM/CACHE */

L1DRAM:     o = 0x00F00000 l = 0x00008000 /* 32kB L1 Data SRAM/CACHE */

EMIFA_CE2:     o = 0xA0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

EMIFA_CE3:     o = 0xB0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

EMIFA_CE4:     o = 0xC0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

EMIFA_CE5:     o = 0xD0000000 l = 0x00800000 /* 8MB EMIFA CE2 */

DDR2_CE0:     o = 0xE0000000 l = 0x20000000 /* 512MB EMIFB CE0 */

}

 

SECTIONS

{

"vectors"     > VECS

"bootload"     > BOOT

    .csl_vect     > L2RAM

.text         > L2RAM

.stack     > L2RAM

.bss     > L2RAM

.cio     > L2RAM    //printf等输入输出函数使用的缓冲区所在块

.const     > L2RAM

.data     > L2RAM

.switch     > L2RAM

.sysmem     > L2RAM

.far     > L2RAM

.args     > L2RAM

.ppinfo     > L2RAM

.ppdata     > L2RAM

 

/* COFF sections */

.pinit     > L2RAM

.cinit     > L2RAM

 

/* EABI sections */

.binit     > L2RAM

.init_array     > L2RAM

.neardata     > L2RAM

.fardata     > L2RAM

.rodata     > L2RAM

.c6xabi.exidx     > L2RAM

.c6xabi.extab     > L2RAM

}

 

DSP中cmd文件

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.