一、CMD文件

链接命令文件(Link Command Files),以后缀.cmd结尾,简称CMD文件。

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

在编写CMD文件时,主要采用MEMORY和SECTIONS 两条伪指令。

在281x调试时,可以将程序代码链接到Flash或者RAM,因此对应两种CMD文件。

MEMORY伪指令

作用:指示存储空间。

语法如下:

MEMORY

{

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

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

}

PAGE:用来指示存储空间的关键字。PAGE n的最大值为255。

name:代表某一属性和地址范围的存储空间名称。长度可以是1~8个字符,在同一页内名称不能相同,不同页内名称可以相同。

attr:用来规定存储空间的属性,共有四种属性:R-只读、W-只写、X-该空间包含可执行代码、I-该空间可以被初始化。实际使用,常忽略此选项。

orgin:用来定义存储空间起始地址的关键字。

length:用来定义存储空间长度的关键字。

举例

MEMORY

{

PAGE 0 :

FLASH : origin = 0x3D8000, length = 0x01FF80 /* FLASH */

BEGIN : origin = 0x3F7FF6, length = 0x000002

ROM : origin = 0x3FF000, length = 0x000FC0

RESET : origin = 0x3FFFC0, length = 0x000002

RAML0 : origin = 0x008000, length = 0x001000

PAGE 1 :

RAMM0 : origin = 0x000000, length= 0x000400 /* RAM M0 */

RAMM1 : origin = 0x000400, length= 0x000400 /* RAM M1 */

RAML1 : origin = 0x009000, length = 0x001000 /* RAM L1 */

RAMH0 : origin = 0x3F8000, length= 0x002000 /* RAM H0 */

}

SECTIONS伪指令

作用:分配段到存储空间,也就是指定段的实际硬件地址空间。

语法如下:

SECTIONS

{

name 0 : > 存储空间名称, PAGE = 页数

name n : > 存储空间名称, PAGE = 页数

}

name :编译器输出段的名称。

存储空间名称:采用MEMORY伪指令指示的存储器空间名称。

PAGE :前面存储器空间名称对应的存储器页。

举例

SECTIONS

{

.cinit : > FLASH, PAGE = 0

.text : > FLASH, PAGE = 0

.const : > FLASH, PAGE = 0

.econst : > FLASH, PAGE = 0

.stack : > RAMM0, PAGE = 1

.bss : > RAML1, PAGE = 1

.ebss : > RAML1, PAGE = 1

}

二、C28x存储器模型

存储器模型:TMS320C28x将存储器分成程序和数据两个线性块。

程序存储器:包含可执行代码,初始化数据和开关量;

数据存储器:包含外部变量、静态变量和系统堆栈。

  编译器产生可重定位的代码和数据块,允许链接器将代码和数据分配到适当的存储器空间,而链接器则根据链接命令文件将代码和数据分配到目标存储器。这些代码和数据块,称为sections(段),有两种基本的sections类型,为初始化段和非初始化段。

初始化段

初始化段包含数据表和可执行代码。C编译器创建如下初始化段:

.text段:包含所有可执行代码和常量;

.cint段:已初始化的变量和常量表(用于C程序);

.pint段:已初始化的变量和常量表(用于C++程序);

.const段:包含字符串常数以及用const声明的全局和静态变量;

.econst段:同.const段,但用far const声明的变量或编译器采用大存储器模式时;

.switch段:为开关语句(switch)建立的数据表。

未初始化段

  未初始化段在存储器(通常是RAM)中保留空间,程序在运行时可在此空间创建和存储变量。C编译器创建如下非初始化块:

.bss段:为全局和静态变量保留空间。程序引导过程中,C引导程序会将ROM中的.cint块中的数据复制到.bss块中;

.ebss段:为用far声明的或大存储器模式下的全局和静态变量保留空间。程序引导过程中,C引导程序会将ROM中的.cint块中的数据复制到.bss块中;

.stack段:为C系统的堆栈分配的空间,用于函数调用时传递参数以及为局部变量分配空间;

.sysmem段:为动态存储器分配保留空间,如果未用到malloc函数,则该块的空间为0;

.esysmem段:为动态存储器分配保留空间,如果未用到far malloc 函数,则该块的空间为0。

DSP中的cmd文件的更多相关文章

  1. 【DSP开发】CMD文件

    DSP的存储器的地址范围,CMD是主要是根据那个来编的. CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间. 所以不同的芯片就有不同大小的rom和ram.放用户程序的地方 ...

  2. DSP TMS320C6000基础学习(4)—— cmd文件分析

    DSP中的CMD文件是链接命令文件(Linker Command File),以.cmd为后缀. 在分析cmd文件之前,必需先了解 (1)DSP具体芯片的内存映射(Memory Map) (2)知道点 ...

  3. 有些CCS工程中为什么会有两个CMD文件?

    这里的CCS就是TI公司的Code Composer Studio 集成开发环境,所以这篇随笔也就是关于TI公司DSP开发过程中对于刚入门同学的一个常见问题了. 那作为一个初学者,对于CCS工程中的c ...

  4. DSP中CMD文件

    DSP中CMD文件 (2012-12-26 20:54:17) 转载▼ 标签: 杂谈 分类: DSP FPGA DSP的存储器的地址范围,CMD是主要是根据那个来编的.CMD 它是用来分配rom和ra ...

  5. CCS中CMD文件解析

    http://blog.csdn.net/u011392772/article/details/49760897 gel文件中主要包含了PLL.DDR等的初始化工作,具体可以看一下gel源码就明白了: ...

  6. CCS中cmd文件的编写

    http://blog.sina.com.cn/s/blog_abe5740601015b3q.html CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的 ...

  7. cmd中执行jar文件命令(待参数)

    cmd中执行jar文件命令(待参数) 1,jar文件路径:F:\products 2,cmd命令: --两个日期参数(空格隔开) java -jar F:\products\analysis.jar ...

  8. 记录自己在 cmd 中执行 jar 文件遇到的一些错误

    记录自己在 cmd 中执行 jar 文件遇到的一些错误 场景: 请求接口,解析接口返回的 JSON 字符串并插入到我们的数据库里面. 情况: 项目在 eclipse 中正常运行,打成 jar 包后在 ...

  9. DSP6455的cmd文件

    DSP6455的cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义 ...

随机推荐

  1. input元素的padding border margin的区别

    padding内(不包含padding)的部分才是可输入部分,也是width和height标明的区域.padding的部分加上width和height部分是background的部分.padding的 ...

  2. QQ消息99+形成--第三方开源--BezierView

    Android第三方开源的BezierView实现了上述QQ的99+条未读消息气泡显示.Android开源BezierView在github上的项目主页是:https://github.com/che ...

  3. 16.python中的浅拷贝和深拷贝

    在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b

  4. [转]命令行 Subversion 入门

    http://omyyal.iteye.com/blog/1762831 命令行 Subversion 入门 如果您参与的项目正在使用 Subversion 进行版本控制,您将需要使用 Subvers ...

  5. openshift云计算平台diy模式安装Python2.7+Flask

    主要翻译了链接1)的教程,加上一些个人研究,步骤如下: 1) 在openshift.redhat.com申请账号,安装git for windows,然后安装gem install rhc,这些比较容 ...

  6. EMVTag系列12《卡片内部风险管理数据》

    Ø  9F53    连续脱机交易限制数(国际-货币) L: 1 -C(有条件):如果执行国际-货币频度检查 PBOC专有数据元. 不使用指定应用货币的连续脱机交易次数最大数,超过后交易请求联机 模板 ...

  7. Mybatis 的日志管理

    Mybatis通过日志工厂提供日志信息,Mybatis内置的日志模版是log4j,commons.log,jdk log也可以通过slf4j简单日志模版结合log4j使用日志信息输出.具体选择哪个日志 ...

  8. hdu 2112 HDU Today

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的 ...

  9. 九度oj 1541 二叉树

    原题链接:http://ac.jobdu.com/problem.php?pid=1541 简答题如下: #include<algorithm> #include<iostream& ...

  10. iOS代码实践总结

    转载地址:http://mobile.51cto.com/hot-492236.htm 最近一个月除了专门抽时间和精力重构之外,还有就是遇到需要添加功能的模块的时候,由于项目中的代码历史因素比较多,第 ...