首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

*.cmd的编写[转帖]

*.cmd的编写[转帖]

硬件:dsp第一课:*.cmd的编写
 


 


看一下你的DSP的存储器的地址范围:
     CMD是主要是根据那个来编的,还有要注意MP/MC,PON以及DON这些位,它们都在PMST
中,PMST的值可以在I/0的映射地址FFE4H中手动修改。我用的F206。不过应该差不多。


 


CMD  它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间.
所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也不尽相同.所以要根据你的
芯片进行修改.
   分两部分.MEMORY和SECTIONS.
MEMORY
{   PAGE 0 ..........


    PAGE 1.........
}


SECTIONS
{SECTIONS
{
    .vectors .................
    .reset   .................
................


}
MEMORY是用来指定芯片的rom和ram的大小和划分出几个区间.
     PAGE 0 对应romAGE 1对应ram
PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度.
如: PAGE 0 :  VECS(区间名字): origin(起始地址) = 0h , length (长度)
=040h  /*VECTORS*/



SECTIONS:(在程序里添加下面的段名如.vectors.用来指定该段名以下,另一个段名以上
的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。
如引用字段名“.vectors ”的程序或数据将被放到VECS ,VECS是PAGE0即是ROM空间 00H
至40H的地方



SECTIONS
{
    .vectors : { } > VECS      PAGE 0   /* Interrupt vector table     */
    .reset   : { } > VECS      PAGE 0   /* Reset code                 */
............
............
..........
}
例子:
/****************************************************************************/
/*  LINKER COMMAND FILE - MEMORY SPECIFICATION for C240/243            
*/
/*                             
            */
/****************************************************************************/
                
/****************************************************************************/
/******** Specify the memory configuration **********************************/
/****************************************************************************/
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
}

这个是网友的根贴,也不错!可以看看!


关于.CMD的理解,我是这样的,
在C语言里,PC指针跳转的实现方法有好多种,比如用函数调用,用条件指令,或者goto等等,但他们的实质都是找到跳转的地址。当然这都是C语言编译器处理的。
但是在DSP里,程序执行过程中也有好多地方需要跳转,所以,同样道理,需要跳转的目标地址。如果你在编程序时知道你所要跳转的地址,那就更好的,但实际上,这是很不好控制的。所以就产生了.CMD。它有一个最大的好处,可以把每个段分配地址,所以比如你想从一个段跳到另一个段的时候,就很方便的知道这个短的起始地址。(大家可以把一个段理解成一个子函数,可能不是太确切)
当然这只是.CMD 的一个功能应用,它还有其他很多好处。大家在应用过程中慢慢体会吧
顶,好贴
好贴

我跟!
经济
号帖子,顶一个
返回列表