CMD文件讲解

dsp中cmd文件的作用主要是用来存储空间的分配。

cmd文件由memory和sections组成。memory用来声明存储空间;sections用作空间分配。28335代码中存在两个cmd文件,一个是用来作为程序数据的内存分配使用,另外一个是作为寄存器数据的存储。

下面对cmd文件做详细注释:(蓝色为代码源码)

MEMORY    第一部分空间声明
{
PAGE 0:    /* Program Memory */cmd中注释只可用/**/,page范围0-255,page0一般用来存储程序代码
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

声明格式:空间名称    :  origin = 起始地址 , length = 空间大小 
   ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */
   RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */
   RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
   RAML2       : origin = 0x00A000, length = 0x001000     /* on-chip RAM block L2 */
   RAML3       : origin = 0x00B000, length = 0x001000     /* on-chip RAM block L3 */
   ZONE6       : origin = 0x0100000, length = 0x100000    /* XINTF zone 6 */ 
   ZONE7A      : origin = 0x0200000, length = 0x00FC00    /* XINTF zone 7 - program space */ 
   FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */
   FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */
   FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */
   FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */
   FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */
   FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */
   FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */
   CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
   BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
   CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
   OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */
   ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */
   
   IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */
   IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */  
   FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */
   ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */        
   RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */
   VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */


PAGE 1 :   /* Data Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
           /* Registers remain on PAGE1                                                  */
   
   BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */
   RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */
   RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
   RAML4       : origin = 0x00C000, length = 0x001000     /* on-chip RAM block L1 */
   RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L1 */
   RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L1 */
   RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L1 */
   ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
   FLASHB      : origin = 0x330000, length = 0x008000     /* on-chip FLASH */
}


/* Allocate sections to memory blocks.
   Note:
         codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code 
                   execution when booting to flash
         ramfuncs  user defined section to store functions that will be copied from Flash into RAM
*/ 
 
SECTIONS  第二部分空间分配

{

自定义sections格式:

          #pragma DATA_SECTION(函数名称或者变量名称 , "自定义数据段section");

          #pragma CODE_SECTION(函数名称或者变量名称 , "自定义数据段section");

sections格式 : 

  数据段名  : load = 加载地址(代码位置),run = 运行地址 , 片区

  数据段名  :       >   加载地址(代码位置),         运行地址 , 片区

   /* Allocate program areas: */
   .cinit              : > FLASHA      PAGE = 0
   .pinit              : > FLASHA,     PAGE = 0
   .text               : > FLASHA      PAGE = 0
   codestart           : > BEGIN       PAGE = 0
   ramfuncs            : LOAD = FLASHD, 
                         RUN = RAML0, 
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         LOAD_SIZE(_RamfuncsLoadSize),
                         PAGE = 0

 

该部分将flash中的程序加载到RAM中使用,实现程序固化,但sections只负责空间分配,不负责程序加载,所以需要搭配以下两条才能实现       

 

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);//程序加载

InitFlash();//flash初始化。。这个需不需要有待参考

该部分详细解读:指向ramfuncs这个段的函数定义在DSP2833x_SysCtrl.c中,

#pragma CODE_SECTION(InitFlash, "ramfuncs");

后期如果需要将其他的存入中同时加载到ram中也可以同时指向该区域;

#pragma CODE_SECTION(EPWM1TIMERISR, "ramfuncs");

#pragma CODE_SECTION(EPWM2TIMERISR, "ramfuncs");

 

   csmpasswds          : > CSM_PWL     PAGE = 0
   csm_rsvd            : > CSM_RSVD    PAGE = 0
   
   /* Allocate uninitalized data sections: */
   .stack              : > RAMM1       PAGE = 1
   .ebss               : > RAML4       PAGE = 1
   .esysmem            : > RAMM1       PAGE = 1


   /* Initalized sections go in Flash */
   /* For SDFlash to program these, they must be allocated to page 0 */
   .econst             : > FLASHA      PAGE = 0
   .switch             : > FLASHA      PAGE = 0      


   /* Allocate IQ math areas: */
   IQmath              : > FLASHC      PAGE = 0                  /* Math Code */
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD 
   
   /* Uncomment the section below if calling the IQNexp() or IQexp()
      functions from the IQMath.lib library in order to utilize the 
      relevant IQ Math table in Boot ROM (This saves space and Boot ROM 
      is 1 wait-state). If this section is not uncommented, IQmathTables2
      will be loaded into other memory (SARAM, Flash, etc.) and will take
      up space, but 0 wait-state is possible.
   */
   /*
   IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD 
   {
   
              IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
   
   }
   */
   
   FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD 
         
   /* Allocate DMA-accessible RAM sections: */
   DMARAML4         : > RAML4,     PAGE = 1
   DMARAML5         : > RAML5,     PAGE = 1
   DMARAML6         : > RAML6,     PAGE = 1
   DMARAML7         : > RAML7,     PAGE = 1
   
   /* Allocate 0x400 of XINTF Zone 7 to storing data */
   ZONE7DATA        : > ZONE7B,    PAGE = 1


   /* .reset is a standard section used by the compiler.  It contains the */ 
   /* the address of the start of _c_int00 for C Code.   /*
   /* When using the boot ROM this section and the CPU vector */
   /* table is not needed.  Thus the default type is set here to  */
   /* DSECT  */ 
   .reset              : > RESET,      PAGE = 0, TYPE = DSECT
   vectors             : > VECTORS     PAGE = 0, TYPE = DSECT
   
   /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
   .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD

}


/*
//===========================================================================
// End of file.
//===========================================================================
*/

 

cmd文件是一种批处理脚本文件,用于在Windows中执行命令行操作。对于dsp28035,cmd文件可以用于执行一系列操作,例如程序的编译、下载和调试等。 首先,在cmd文件中,可以使用"cd"命令切换到指定路径,例如cd C:\dsp28035。 接下来,使用"cl2000"命令编译程序文件。cl2000是dsp28035编译器的命令行工具,用于将源代码文件编译成目标文件。例如,可以使用以下命令编译名为example.c的C源代码文件: cl2000 example.c 然后,使用"bl2000"命令生成bootloader文件。bl2000是dsp28035生成bootloader的命令行工具,用于生成用于下载程序的bootloader文件。例如,可以使用以下命令生成名为example_bootldr.out的bootloader文件: bl2000 example.out example_bootldr.out 接下来,使用"dldr3500"命令下载程序文件。dldr3500是dsp28035下载器的命令行工具,用于将目标文件下载到dsp28035芯片上。例如,可以使用以下命令下载名为example.out的目标文件: dldr3500 example.out 最后,可以使用"hercules"命令启动程序烧写工具Hercules,用于在dsp28035上调试程序。例如,可以使用以下命令启动Hercules: hercules 除了以上几个常用命令外,cmd文件还可以使用其他命令,如"echo"命令用于在命令行输出信息,"copy"命令用于复制文件,"del"命令用于删除文件等。 需要注意的是,cmd文件的编写需要熟悉Windows命令行操作和dsp28035开发工具的命令行工具使用方法。可以查阅相关的文档和手册以获得更详细的帮助和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值