F2812的CMD文件的编写--经验总结

转载 2011年01月23日 14:21:00

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

1)输入/输出定义:

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

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

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

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

  链接器选项

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

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

 

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

(一)用于调试时用,取名为SRAM.CMD

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

MEMORY

{

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     // boot ROM available if MP/MCn=0

   RESET       : origin = 0x3FFFC0, length = 0x000002     

   VECTORS     : origin = 0x3FFFC2, length = 0x00003E     

 PAGE 1 :   // Data Memory

   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    

   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

{

// Compiler Required Sections

   .text             : > PRAMH0,      PAGE = 0

   .cinit            : > PRAMH0,      PAGE = 0

   .stack            : > RAMM1,       PAGE = 1

   .bss              : > 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  // we are not using the .reset

                                                              // section

 

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

 

}

 

(二)用于烧写到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

 

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

1、各个段的含义

    以下是TI公司的技术文档中对一些段的说明,现截个图给大家参考:

  

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

.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

 

 

2、自定义段的方法:

 我知道的有两种:

(1)用汇编代码,如上述中的codestart段。

       格式为:

       .sect “段名”

       (段的内容)

       .end  

(2)用C语言中的#pragma,如上述中的CsmPwlFile段。

       格式为:

#pragma DATA_SECTION(函数名或变量名,"段名");

#pragma CODE_SECTION(函数名或变量名,"段名");

 

http://www.61ic.com/Services/Course/C2000/201009/27623.html

 

相关文章推荐

DSP28335工程模版各文件介绍

首先建立工程,file-new-css project。然后设置该工程。(包含include路径,是否使用浮点,生成的文件路径等),然后加入一些TI已经写好的文件。最终如下图: 一、cc...

CCS如何调整字体大小

点菜单栏上的windows,选择preferences,在弹出的对话框中点开general -->appearance -->colors and fonts, 在C/C++中修改你想要的字体和大小...

TMS320F2812的CMD文件配置详解

【推荐】TMS320F2812的CMD文件配置详解DSP芯片以其极高的精度,性能及运算速度等无与伦比的优点使它得到了十分广泛的应用,TMS320F2812是TI公司生产的到目前为止用于数字控制领域的最...
  • Augusdi
  • Augusdi
  • 2012年05月12日 08:35
  • 1969

TMS320F2812的CMD文件配置详解

DSP芯片以其极高的精度,性能及运算速度等无与伦比的优点使它得到了十分广泛的应用,TMS320F2812是TI公司生产的到目前为止用于数字控制领域的最好的DSP芯片,在对它的仿真开发过程中,编译器生成...
  • Augusdi
  • Augusdi
  • 2012年05月17日 23:14
  • 3934

DSP2812cmd文件编写及实例

  • 2011年07月02日 18:56
  • 39KB
  • 下载

F5+terracotta+EhCache配置分布式集群经验总结

F5硬件主要负责负载均衡,分发请求; EhCache主要负责缓存;Terracotta是一个缓存管理类工具(也可以支持分布式),管理EhCache和session; 工作原理图 terracott...

JSR75文件系统使用经验总结

  • 2011年03月15日 09:34
  • 52KB
  • 下载

成功烧写TMS320F2812经验

flash内得程序代码以最快速度运行,需要设置flash配置寄存器的等待周期数,而“设置flash配置寄存器的等待周期数”的这段代码是不能在flash内部执行的,这样就会出现两种实际的配置方式:  一...
  • Augusdi
  • Augusdi
  • 2012年05月12日 08:34
  • 8962
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:F2812的CMD文件的编写--经验总结
举报原因:
原因补充:

(最多只允许输入30个字)