一、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. Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值

    感谢原作者:破剑冰-Oracle中Clob类型处理解析 上一篇分析:ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 最近为Clob字段在插入数据时发现当字符的字节数(一个半角字符一 ...

  2. 使用 Attribute +反射 来对两个类之间动态赋值

    看同事使用的 一个ORM 框架 中 有这样一个功能  通过特性(附加属性)的功能来 实现的两个类对象之间动态赋值的 功能 觉得这个功能不错,但是同事使用的 ORM 并不是我使用的  Dapper  所 ...

  3. Ruby on Rail学习笔记

    说明:只针对Windows8.1 Windows下,上rubyinstaller上下载最新的railsinstaller包含Ruby2.1的,然后更新gem 用命令: gem update --sys ...

  4. golang的并发

    Golang的并发涉及二个概念: goroutine channel goroutine由关键字go创建. channel由关键字chan定义 channel的理解稍难点, 最简单地, 你把它当成Un ...

  5. randomize_va_space

    proc/sys/kernel/randomize_va_space用于控制Linux下 内存地址随机化机制(address space layout randomization),有以下三种情况 0 ...

  6. mysql数据库编码设置成utf-8,避免出现乱码

    设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 C ...

  7. Jquery 1.8.2 click function - 动态

    Jquery 动态按钮方法如下:   $("#parentID").on("click",'.classname',function(){$(this).par ...

  8. [SSH服务]——一个SSH无密码登陆实验

    实验拓扑图 实验描述 机房内有两台服务器: (1)B服务器10.0.10.158,充当Web服务器,有普通用户user_00 (2)C服务器10.0.10.191,充当Mysql服务器,有普通用户us ...

  9. tomcat设置内存大小

    -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

  10. 20145129 《Java程序设计》第1周学习总结

    20145129 <Java程序设计>第1周学习总结 教材学习内容总结 在第一章学习后初步了解了Java历史及发展,以及JCP,JSR,JVM的相关知识了解.JCP是一个开放性国际组织,由 ...