问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

帮忙求解DSP中 CMD文件含义

发布网友 发布时间:2022-05-13 13:53

我来回答

2个回答

热心网友 时间:2023-08-17 22:34

1命令文件的组成

命令文件的开头部分是要链接的各个子目标文件的名字,这样链接器就可以根据子目标文件名,将相应的目标文件链接成一个文件;接下来就是链接器的操作指令,这些指令用来配置链接器,接下来就是MEMORY和SECTIONS两个伪指令的相关语句,必须大写。MEMORY,用来配置目标存储器,SECTIONS用来指定段的存放位置。结合下面的典型DOS环境的命令文件link.cmd来做一下说明:

file.obj //子目标文件名1

file2.obj //子目标文件名2

file3.obj //子目标文件名3

- o prog.out //连接器操作指令,用来指定输出文件

- m prog.m //用来指定MAP文件

MEMORY

{ 略 }

SECTIONS

{ 略 }

otherlink.cmd

本命令文件link.cmd要调用的otherlink.cmd等其他命令文件,则文件的名字要放到本命令文件最后一行,因为放开头的话,链接器是不会从被调用的其他命令文件中返回到本命令文件。
2 MEMORY伪指令

MEMORY用来建立目标存储器的模型,SECTIONS指令就可以根据这个模型来安排各个段的位置,MEMORY指令可以定义目标系统的各种类型的存储器,及容量。MEMORY的语法如下:

MEMORY

{

PAGE 0 : name1[(attr)] : origin = constant,length = constant

name1n[(attr)] : origin = constant,length = constant

PAGE 1 : name2[(attr)] : origin = constant,length = constant

name2n[(attr)] : origin = constant,length = constant

PAGE n : namen[(attr)] : origin = constant,length = constant

namenn[(attr)] : origin = constant,length = constant

}

PAGE关键词对独立的存储空间进行标记,页号n的最大值为255,实际应用中一般分为两页,PAGE 0程序存储器和PAGE 1数据存储器。

name存储区间的名字,不超过8个字符,不同的PAGE上可以出现相同的名字(最好不用,免的搞混),一个PAGE内不许有相同的name。

attr的属性标识,为R表示可读;W可写X表示区间可以装入可执行代码;I表示存储器可以进行初始话,什么属性代码也不写,表示存储区间具有上述的四种属性,基本上我们都选择这种写法。

origin:略。

length:略。
下面是我经常用的2407的简单写法大家参考,程序从0x060是要避开加密位,不从0x0044开始更可靠一点,此例中的同名的页可以只写第一个,其后省略,但写上至少安全一点:

MEMORY

{

PAGE 0: VECS: origin = 0x0000, length 0x40

PAGE 0: PROG: origin = 0x0060, length 0x6000

PAGE 1: B0 : origin = 0x200, length 0x100

PAGE 1: B1 : origin = 0x300, length 0x100

PAGE 1: DATA: origin = 0x0860, length 0x0780

}
3 SECTIONS伪指令
SECTIONS指令的语法如下:
SECTIONS
{
.text: {所有.text输入段名} load=加载地址 run =运行地址
.data: {所有.data输入段名} load=加载地址 run =运行地址
.bss: {所有.bss输入段名} load=加载地址 run =运行地址
.other: {所有.other输入段名} load=加载地址 run =运行地址
}
SECTIONS必须用大写字母,其后的大括号里是输出段的说明性语句,每一个输出段的说明都是从段名开始,段名之后是如何对输入段进行组织和给段分配存储器的参数说明:
以.text段的属性语句为例,“{所有.text输入段名}”这段内容用来说明连接器输出段的.text段由哪些子目标文件的段组成,举例如下

SECTIONS
{
.text:{ file1.obj(.text) file2(.text) file3(.text,cinit)}略
}

指明输出段.text要链接file1.obj的.text和 file2的.text 还有file3的.text和.cinit。在CCS的SECTIONS里通常只写一个中间没有内容的“{ }”就表示所有的目标文件的相应段
接下来说明“load=加载地址 run =运行地址”链接器为每个输出段都在目标存储器里分配两个地址:一个是加载地址,一个是运行地址。通常情况下两个地址是相同的,可以认为输出段只有一个地址,这时就可以不加“run =运行地址”这条语句了;但有时需要将两个地址分开,比如将程序加载到FLASH,然后放到RAM中高速运行,这就用到了运行地址和加载地址的分别配置了,如下例所示:
.const :{略} load = PROG run = 0x0800
常量加载在程序存储区,配置为在RAM里调用。
“load=加载地址”的几种写法需要说明一下,首先“load”关键字可以省略,“=”可以写成“>”, “加载地址”可以是:地址值、存储区间的名字、PAGE关键词等,所以大家见到“.text:{ } > 0x0080”这样的语句可千万不要奇怪。“run =运行地址”中的

热心网友 时间:2023-08-17 22:35

l rts2800.lib //包含2800的库文件
-stack 400h //栈大小为400h
-heap 100// 堆大小100h
MEMORY//配置目标存储器关键词,划分出不同类型存储空间;空间名字自定
{ //定义存储空间PAGE0
PAGE 0 : PROG(R) : origin = 0x3E8000, length = 0x10000//PROG空间的起始地址以及空间长度
PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0// BOOT空间起始地址3FF000,length0xFC0
PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2//RESET空间起始地址3FFC0,长度0x2
PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3E//中断向量表起始地址和大小
//定义存储空间PAGE1
PAGE 1 : M0RAM(RW) : origin = 0x000000, length = 0x400//片内存储空间M0RAM
PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400//片内存储空间M1RAM
PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000//片内存储空间L0L1RAM
PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000//片内存储空间H0L1RAM
}

SECTIONS//指定段的存储位置的关键词
{
/* 22-bit program sections */
.reset : > RESET, PAGE = 0//复位信号存储在之前定义的RESET空间中
vectors : > VECTORS, PAGE = 0//中断向量存储在之前定义的RESET空间中
.pinit : > PROG, PAGE = 0//全局构造器初始化的变量和常量表
.cinit : > PROG, PAGE = 0//cinit为对全局变量和静态变量初始化的常数,存储在PROG中
.text : > PROG, PAGE = 0//二进制指令代码段,存储在PROG中

/* 16-Bit data sections */
.const : > L0L1RAM, PAGE = 1 //字符串/声明以及被明确初始化的全局变量和静态变量的存储地址L0L1RAM
.bss : > L0L1RAM, PAGE = 1//BSS全局变量和静态变量的存储地址L0L1RAM
.stack : > M1RAM, PAGE = 1 //堆栈存储地址M1RAM
.sysmem : > M0RAM, PAGE = 1//动态存储器分配保留空间,包括malloc等,存储地址M0RAM

/* 32-bit data sections */
.ebss : > H0RAM, PAGE = 1//下面这三个加E开头的存储在片外RAM中,在最大模式存储器的情况下使用
.econst : > H0RAM, PAGE = 1//
.esysmem : > H0RAM, PAGE = 1//
}

CMD文件的配置和你的GEL文件有很大联系,你可以看看GEL文件里面芯片的寄存器和各个存储空间的信息。百度文库里面有个叫“CMD文件的原理”的PDF还不错,最好还是把TI 2800的英文手册拿来看,下面这个是我上传的可以拿来参考下
http://wenku.baidu.com/view/b2714485ec3a87c24028c479.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...每次文字比较多超出屏幕大小就不知道怎么截屏,求教大佬! 我国政策性 广西明士清医疗器械有限公司怎么样? 广西禾力药业有限公司怎么样? 广西龙母圣商贸有限公司怎么样? 安徽合肥有什么去痔的好地方 我女朋友的谷丙转氨酶过高(达到121),而且两对半检测为阴性,是肝功能有... 泸州丽人女子医院开展科室 自由之子本次世界杯是否将在小组赛中被菜? 世界杯谁会嬴 有没有办法直接擦除DSP原先设置的密码? 如何读取没有加密的DSP芯片程序? DSP程序如何加密? 兴平市青果教育培训学校有限公司怎么样? 青果灵动(天津)科技有限公司怎么样? 廊坊发展股份有限公司怎么样? 深圳市青果时尚设计有限公司怎么样? 大连青果科技有限公司怎么样? 深圳市青果商贸有限公司怎么样? 广州青果网络科技有限公司怎么样? 深圳市青果教育机构有限公司怎么样? 求汤姆索亚历险记的英文版剧本!!! 《汤姆·索亚历险记》的英语剧本(带中文翻译) 求关于《汤姆索亚历险记》的英语剧本??? 汤姆索亚历险记的剧本???回答好多少悬赏都给!急 男朋友另有新欢了会有什么表现啊 男生有了新欢不愿主动提出分手,会怎么暗示你呢? csgo怎么买护甲和头盔 手机电话音量小怎么解决 电脑价格查询软件 创维55E361S图像重影 1949年之后到1994年之前中国GDP第一大省的辽宁省现在为何排第八? 福建倒一的南平,在辽宁GDP排第三,人均GDP排第四,辽宁怎么了? 求一些顺口溜 带有“四”和“五”的词语或成语 琴棋书画`下半句是什么``? 诸葛亮的师傅是谁?他师兄弟都有谁呢? 山药和枸杞可以一起吃吗? 红枣枸杞桂圆山药一起泡茶喝有什么好处 枸杞子和山药能一起泡水喝吗 枸杞跟山药能一起泡水喝不?拜托了各位 谢谢 湖南一蛋糕店老板偷偷为消防员送专属生日蛋糕,她是如何知道消防员生日的? 湖南一蛋糕店老板为消防员送专属生日蛋糕,到目前为止她总共送了多少蛋糕? 怎么样趁男朋友不注意送生日蛋糕? 给女友偷偷地定生日蛋糕是不是自做主张,她不喜欢吃甜食,虚伪是怎样的表现啊?是个人有个人的理解吗? 一个认识不到一个月的男生网友突然就送我生日蛋糕是怎么回事而且还是买了蛋糕才告诉我的? csgo有国服怎么买 偷偷给他订了生日蛋糕,他自己去取的可都没问店方是谁给他订的,也没给我打电话,真的不解??? 偷偷送生日礼物 能提前一天送喜欢的人生日蛋糕吗