CMD文件编写

技术标签: cmd文件编写  ccs学习

CMD文件里包含三部分内容:

1)输入/输出定义:

  。obj文件:链接器要链接的目标文件;

  .lib文件:链接器要链接的库文件;

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

  。out文件:链接器生成的可执行代码;

  链接器选项

2)MEMORY命令:描述系统实际的硬件资源

3)SECTIONS命令:描述“段”如何定位

 

F2812的CMD文件只包含后两部分,现对它的编写做一下总结:

  • 用于调试时用,取名为SRAM.CMD

(二)用于烧写到FLASH中时用,取名为FLASH.CMD

     FLASH.CMD与SRAM.CMD基本一样,只是有两处改动:一是MEMORY中将你的程序代码部分映射到FLASH空间里;二是在SECTIONS中添加一个用户定义的起始段,起始段的代码如下:

//User Defined Sections , Used by file DSP28_CodeStartBranch。asm

   codestart         : > BEGIN,      PAGE = 0         

其中DSP28_CodeStartBranch.asm中的关键代码为:

.ref _c_int00

.sect “codestart”

Code_start:

LB _c_int00

。end

 

 

这里有个比较标准的F2812的CMD文件,可以供大家借鉴使用:

MEMORY

{s

PAGE 0:   

   ZONE0       : origin = 0x002000, length = 0x002000    

   ZONE1       : origin = 0x004000, length = 0x002000    

   RAML0       : origin = 0x008000, length = 0x001000    

   ZONE2       : origin = 0x080000, length = 0x080000    

   ZONE6       : origin = 0x100000, length = 0x080000    

   OTP          : origin = 0x3D7800, length = 0x000800    

   FLASHJ      : origin = 0x3D8000, length = 0x002000    

   FLASHI      : origin = 0x3DA000, length = 0x002000    

   FLASHH      : origin = 0x3DC000, length = 0x004000    

   FLASHG      : origin = 0x3E0000, length = 0x004000    

   FLASHF      : origin = 0x3E4000, length = 0x004000    

   FLASHE      : origin = 0x3E8000, length = 0x004000    

   FLASHD      : origin = 0x3EC000, length = 0x004000    

   FLASHC      : origin = 0x3F0000, length = 0x004000    

   FLASHA      : origin = 0x3F6000, length = 0x002000    

   BEGIN_H0    : origin = 0x3F8000, length = 0x000002     

   BEGIN_FLASH : origin = 0x3F7FF6, length = 0x000002    

   PRAMH0      : origin = 0x3F8002, length = 0x001FFE     

   ZONE7       : origin = 0x3FC000, length = 0x003FC0     

   ROM         : origin = 0x3FF000, length = 0x000FC0    

   RESET       : origin = 0x3FFFC0, length = 0x000002     

   VECTORS     : origin = 0x3FFFC2, length = 0x00003E     

 PAGE 1 :  

   RAMM0       : origin = 0x000000, length = 0x000400    

   RAMM1       : origin = 0x000400, length = 0x000400    

 

   DEV_EMU     : origin = 0x000880, length = 0x000180    

   FLASH_REGS  : origin = 0x000A80, length = 0x000060    

   CSM         : origin = 0x000AE0, length = 0x000010    

   XINTF       : origin = 0x000B20, length = 0x000020    

   CPU_TIMER0  : origin = 0x000C00, length = 0x000008  

  CPU_TIMER1 : origin = 0x000C08, length = 0x000008       

  CPU_TIMER2 : origin = 0x000C10, length = 0x000008

   PIE_CTRL    : origin = 0x000CE0, length = 0x000020    

   PIE_VECT    : origin = 0x000D00, length = 0x000100    

   ECAN_A      : origin = 0x006000, length = 0x000100    

   ECAN_AMBOX  : origin = 0x006100, length = 0x000100 

   

   SYSTEM      : origin = 0x007010, length = 0x000020    

   SPI_A       : origin = 0x007040, length = 0x000010    

   SCI_A       : origin = 0x007050, length = 0x000010    

   XINTRUPT    : origin = 0x007070, length = 0x000010    

   GPIOMUX     : origin = 0x0070C0, length = 0x000020    

   GPIODAT     : origin = 0x0070E0, length = 0x000020    

   ADC         : origin = 0x007100, length = 0x000020    

   EV_A        : origin = 0x007400, length = 0x000040    

   EV_B        : origin = 0x007500, length = 0x000040     

   SCI_B       : origin = 0x007750, length = 0x000010    

   MCBSP_A     : origin = 0x007800, length = 0x000040    

 

   RAML1       : origin = 0x009000, length = 0x001000    

   FLASHB      : origin = 0x3F4000, length = 0x002000    

   CSM_PWL     : origin = 0x3F7FF8, length = 0x000008     

   DRAMH0      : origin = 0x3f9000, length = 0x001000    

SECTIONS

{

  

  。text             : > PRAMH0,      PAGE = 0          包括所有的可执行代码和常数

   。cinit            : > PRAMH0,      PAGE = 0          包括初始化的变量和常量表

   .stack            : > RAMM1,       PAGE = 1     

   .buss              : > RAMM0,       PAGE = 1

   .ebss             : > RAMM0,       PAGE = 1

   .const            : > RAMM0,       PAGE = 1

   .econst           : > RAMM0,       PAGE = 1     

   .sysmem           : > RAMM1,       PAGE = 1

   .reset            : > RESET,       PAGE = 0, TYPE = DSECT       //  复位中断向量表

                                                             

//Peripheral Frame 0 Register Structures

   DevEmuRegsFile    : > DEV_EMU,     PAGE = 1

   FlashRegsFile     : > FLASH_REGS,  PAGE = 1

   CsmRegsFile       : > CSM,         PAGE = 1

   XintfRegsFile     : > XINTF,       PAGE = 1

   CpuTimer0RegsFile : > CPU_TIMER0,  PAGE = 1 

   PieCtrlRegsFile   : > PIE_CTRL,    PAGE = 1     

   PieVectTable      : > PIE_VECT,    PAGE = 1 

//Peripheral Frame 1 Register Structures

   SysCtrlRegsFile   : > SYSTEM,      PAGE = 1

   SpiaRegsFile      : > SPI_A,       PAGE = 1

   SciaRegsFile      : > SCI_A,       PAGE = 1

   XIntruptRegsFile  : > XINTRUPT,    PAGE = 1

   GpioMuxRegsFile   : > GPIOMUX,     PAGE = 1

   GpioDataRegsFile  : > GPIODAT      PAGE = 1

   AdcRegsFile       : > ADC,         PAGE = 1

   EvaRegsFile       : > EV_A,        PAGE = 1

   EvbRegsFile       : > EV_B,        PAGE = 1

   ScibRegsFile      : > SCI_B,       PAGE = 1

   McbspaRegsFile    : > MCBSP_A,     PAGE = 1

 

//Peripheral Frame 2 Register Structures

   ECanaRegsFile     : > ECAN_A,      PAGE = 1  

   ECanaMboxesFile   : > ECAN_AMBOX   PAGE = 1

 

//Code Security Password Locations 

   CsmPwlFile        : > CSM_PWL,     PAGE = 1 

}

 

 

(三)SECTIONS中段的含义与用户自定义段的方法

1、各个段的含义

此外还有一些段的含义如下(这仅是我见过的,有漏下的还请提示,大家一起学习):

.reset         复位中断向量表

。vectors       中断向量表

.data          已初始化数据,常数数据(比如对变量的初始化数据)

.pvecs         外围模块中断向量表

。ref           引用外部定义的变量或函数名

。global        引用全局变量或函数

.space         定义要保留的空间

.def           定义变量,与#define功能相同

。end           段的结束标识

。sect          用户自定义的已初始化段

.asect         比.sect多了绝对地址定位功能,一般不用

.usect         用户自定义的未初始化段

 

已初始化的段:。text, 。cinit, 。const, 。econst, 。pinit, 。switch

。text:所有可以执行的代码和常量

.cinit:全局变量和静态变量的C初始化记录

。const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明

.econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明

。pinit:全局构造器(C++)程序列表

。switch:包含转换语气声明的列表

非初始化的段:.bss, .ebss, .stack, .sysmem, .esysmem(更好的理解就是,这些段就是存储空间而已)

..bss:为全局变量和局部变量保留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.bss空间中

.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中

.stack:为系统堆栈保留的空间,主要用于和函数传递变量或为局部变量分配空间

.sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有宏函数,此空间保留为0

.esysmem:为动态存储分配保留的空间,如果有far函数,此空间被相应的占用,如果没有,此空间保留为0

 

(四)Load allocation,由它定义将输出段加载到存储器中的什么位置。
      allocation是将逻辑段定位的地址说明

      语法:Load=allocation或>allocation
      Run allocation,由它定义输出段在存储器的什么位置开始运行

 

 

极速赛车怎么看规律 98彩票计划群 吉利彩票计划群 山东11选5计划 爱彩票计划群 山东11选5走势 必赢彩票计划群 上海11选5走势 山东11选5走势 极速赛车登陆