DSP中cmd文件(待修改)

DSP中cmd文件(待修改)

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

DSP工程文件夹中有两个cmd文件,其中一个为linker.cmd;另一个为c6455.cmd。c6455.cmd文件在工程中。工程目录下的文件夹中.map文件里有section allocation map可以查看产生的"段"。查看 .map 文件中"output section"那一列,那些长度(length)非 0 的段,就是你的项目真正会产生的段;那些长度为 0 的段,基本都可以从 CMD 文件中删除。

DSP用到的存储器只分为两种:掉电易失、掉电非易失。

DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码存储位置。CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间。所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同。所以要根据芯片进行修改,分为 MEMORY和SECTIONS两个部分

DSP 芯片的片内存储器, 只要没有被 TI 占用, 用户都可以全权支配。 TI 设计了 "CMD文件"这种与用户的接口形式,用户通过编写 CMD 文件,来管理、分配系统中的所有物理存储器和地址空间。CMD 文件其实就是用户的"声明" ,包括两方面的内容:

1、用户声明的整个系统里的存储器资源。无论是 DSP 芯片自带的,还是用户外扩的,凡是可以使用的、需要用到的存储器和空间,用户都要一一声明出来:有哪些存储器,它们的位置和大小。如果有些资源根本用不到,可以视为不存在,不必列出来;列出来也无所谓。

2、用户如何分配这些存储器资源,即关于资源分配情况的声明。用户根据自己的需要,结合芯片的要求,把各种数据分配到适当种类、适当特点、适当长度的存储器区域,这是编写 CMD 文件的重点。

用户编写完自己的程序以后,要经过开发环境(编译器)的安排和解释(即编译) ,转换为芯片可以识别的机器码,最后下载到芯片中运行。CMD 文件就是在编译源程序、生成机器码的过程中,发挥作用的,它作为用户的命令或要求,交给开发环境(编译器)去执行:就这么分配!

命令文件的组成

命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是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的内存区。

 

例:

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

}

c6455.cmd文件内容

/****************************************************************************/

/*     C6455.cmd */

/*     Copyright (c) 2010 Texas Instruments Incorporated             */

/*     Author: Rafael de Souza     */

/*     */

/* Description: This file is a sample linker command file that can be                 */

/* used for linking programs built with the C compiler and             */

/* running the resulting .out file on an C6455         */

/* device. Use it as a guideline. You will want to             */

/* change the memory layout to match your specific C6xxx         */

/* target system. You may want to change the allocation         */

/* scheme according to the size of your program.         */

/* */

/****************************************************************************/

-l rts64plus.lib

输入/输出定义:这一部分,可以通过ccs的"Build Option........"菜 单设置: .obj(链接的目标文件)、.lib(链接的库文件)、.map(生成的交叉索引文件)、.out(生成的可执行代码)。

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

}

这是TI官方的分配方式。

SECTIONS

{

"vectors"         >     VECS

"bootload"          >     BOOT

.csl_vect         >     L2RAM

.text             >     L2RAM    //包含可执行的汇编指令代码。如果不声明,代码就归属.text段;

.stack         >     L2RAM    //存放C语言的栈

.bss         >     L2RAM    //定义变量存放空间;

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

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

.data          >     L2RAM    //一般包括常数数据。如用来对变量初始化的数据或一个正弦表格等;

.switch          >     L2RAM    //存放switch语句产生的常数表格。

.sysmem          >     L2RAM    //存放C语言的堆heap;

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

.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

}

详细的COFF文件格式包括有段头、可执行代码和初始化数据、可重定位信息、行号入口、符号表、字符串表等。这些属于编写操作系统和编译器人员关心的范畴,从应用的层面讲,DSP的C语言应掌握两点:通过伪指令定义段,并给段分配空间。

编译器处理段得过程为:每个源文件都编译成独立的目标文件(.obj),每个目标文件含有自己的段;连接器把这些目标文件中相同段名得部分连接在一起,生成最终的可执行文件(.out)。

1、段分两大类:已初始化段未初始化段

1)已初始化段含有真实的指令和数据,存放在程序存储空间。程序存储空间在DSP片内是FLASH。调试代码时,下载代码到片外的程序存储空间——此时多为RAM。

.text:包含可执行的汇编指令代码。如果不声明,代码就归属.text段;

.data:一般包括常数数据。如用来对变量初始化的数据或一个正弦表格等;

.sect:用户可自行定义已初始化段;

.asect:作用类似于.sect,但多了绝对地址定位功能。

.cinit:存放用来对全局和静态变量初始化的常数。

.switch:存放switch语句产生的常数表格。

(1)被初始化的Section(包含数据表和可执行代码

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

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

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

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

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

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

2)未初始化的段只是保留变量的地址空间,未初始化的段存放在数据存储空间中,数据存储空间多为RAM存储单元。

.bss:定义变量存放空间;

.usect:用户可自行定义未初始化段;

.stack:存放C语言的栈;

.sysmen:存放C语言的堆;

.const:简单而言,是用来存放一些特殊的常数和字符等。

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

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

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

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

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

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

CMD文件中,page0代表程序空间,page1代表数据空间。

page0:.text,.cinit,通过#pragma CODE_SECTION定义的段;

page1:.switch,.const,.bss,.stack,.sysmen,通过#pragma DATA_SECTION定义的段。

CMD文件支持C语言的块注释符"/**/",但不支持"//"。

CMD文件两大功能:指示存储空间和分配段到存储空间:

1)通过MEMORY来指示存储空间:

MEMORY

{

PAGE0:name 0 [(attr)] : origin=constant, length=constant

PAGEn:name 0 [(attr)] : origin=constant, length=constant

}

2)通过SECTIONS来分配段到存储空间:

SECTIONS

{

name:[property,property,property,…]

name:[property,property,property,…]

}

(1)       name输出端的名;

(2)       property输出段的属性。

A、load:定义输出段被装载到哪里的关键字,load = allocation

Allocation可以是强制地址,如:load=0x100,更多时候,allocation是存储空间的名称。

B、run:定义输出段将会在哪里运行的关键字。CMD文件规定当只出现一个关键字load或run时,表示load地址和run地址是重叠的。

时间: 2024-12-15 01:53:09

DSP中cmd文件(待修改)的相关文章

DSP中cmd文件(修改1)

DSP中cmd文件(修改1) 看TMS320C6000 Optimizing Compiler v7.6 User's Guide和TMS320C6000 Assembly Language Tools User's Guide ? CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用. ? DSP工程文件夹中有两个cmd文件,其中一个为linker.cmd;另一个为c6455.cmd.c6455.cmd文件在工程中.工程

DSP中cmd文件

DSP中cmd文件 CMD 的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令的使用. 1.命令文件的组成 命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件:接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写. CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间.所

CCS中CMD文件解析

http://blog.csdn.net/u011392772/article/details/49760897 gel文件中主要包含了PLL.DDR等的初始化工作,具体可以看一下gel源码就明白了:CMD主要是用于定义内存的划分,及数据.代码等的存放位置. CMD:command命令,顾名思义就是命令文件指定存储区 域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间. 1.)#pragma ,CODE_SECTION和DATA_SECTION

notepad无法对linux中的文件进行修改???

.问题描述: 用notepad++的sftp服务连接LInux,连接成功 想修改图中的程序,来调试udp客户端,但是修改后保存失败(很早之前是成功的) .. 试着解决: 参考博客:https://blog.csdn.net/happy_wu/article/details/73302994 尝试给登录ftp用户一个root组权限: 参考:https://www.cnblogs.com/paul8339/p/6097398.html 出现如下图错误: 参考博客:https://blog.csdn.

CCS中cmd文件的编写

http://blog.sina.com.cn/s/blog_abe5740601015b3q.html CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的就是MEMORY和SECTIONS两个伪指令 的使用,常常令人困惑,系统出现的问题也经常与它们的不当使用有关,我将重点讲解.CCS是从DOS系统下DSP软件继承的开发环境.CCS的命令文件是 DOS命令文件经过很长时间的引申发展了,已经变得非常了简洁(不知道TI文档有没有详细CMD配置说明). 1命

DSP中的cmd文件

DSP6455中cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码存储位置.CMD分配ROM和RAM空间,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同.所以要根据芯片进行修改. DSP 芯片的片内存储器, 只要没有被 TI 占用, 用户都可以全权支配. TI 设计了 "CMD文件"这种与

VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0'' NAME: '' AUTHOR: Microsoft , Microsoft' DATE : 2014/7/9'' COMMENT: '批量修改文件夹下对应的所有文件名''==========

修改win7电脑中所有文件的默认查看方式

怎么修改win7电脑中所有文件的默认查看方式 如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“详细信息”的方式展现.不要挨个打开文件夹里来修改. 1.首先对着空白处,鼠标右键单击,然后点击“排列方式” 选一个 还有 你还可以点击“查看” 选择图标大小.详细信息.平铺.列表 等 2.点击我的电脑左上角的 组织 按钮 随后选择“文件夹和搜索选项” ,再点击“查看”选项卡 ,然后点击“应用到文件夹”这

github中readme.md文件的修改

研究了一下github上readme.md文件的修改删除,只能说如果是第一次还真找了一会. 删除就在旁边 重新提交就ok了!