一、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. ubuntu打开 txt 文件乱码

    ubuntu12.04 gedit 打开 windows 分区中的 txt 文件乱码,是因为 ubuntu 和 windows 两个系统的编码不同.解决办法:终端里依次输入以下2 条命令即可: 代码: ...

  2. GetProperties(BindingFlags)说明

    Instance|Public:获取公共的的实例属性(非静态的) Instance|NonPublic:获取非公共的的实例属性(非静态的).(private/protect/internal) Sta ...

  3. python 序列化之JSON和pickle详解

    JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...

  4. Python学习教程(learning Python)--1.1Python程序设计流程

    Python程序设计与其他高级语言程序设计流程基本一致     step1 程序设计     step2 编写Python代码     setp3 Python语句语法纠错     step4 测试程 ...

  5. 浅谈objective—C管理内存

    这段时间被导师催着论文,调试各种BUg,也是醉了,发现很大程度上,内存出错,栈溢出,各种悲剧.那么今天就和大家一起对OC的内存管理来个探微吧.Objective-C使用一个保留计数记录了我们所创建的所 ...

  6. 关于使用 Connect-Busboy 实现文件上传 优化说明

    这篇博文完全上关于上一篇的优化 先看上一篇 node.js 在 Express4.0 框架使用 Connect-Busboy 实现文件上传 因为从上次博客改用 connect-busboy 来上传文件 ...

  7. 使用工厂bean和Utility Schema定义集合

    工厂bean是实现了beanFactory接口的bean,也可以继承AbstractFactoryBean,主要是用于在给定属性参数之后自动创建一个bean对象. 我们在使用基本集合标记定义集合时,不 ...

  8. C++11 常用语法

    1 新类型 C++ 11新增了long long和unsigned long long,以支持64bit宽度: 新增char16_t和char32_t以支持16位和32位字符表示: 增加了“原始”字符 ...

  9. [原]项目进阶 之 集群环境搭建(二)MySQL集群

    上次的博文中我们介绍了一下集群的相关概念,今天的博文我们介绍一下MySQL集群的相关内容. 1.MySQL集群简介 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单 ...

  10. 【工作总结】LLDB调试技巧 - 篇一

    备忘命令 : 命令“l”可以查看程序当前运行的位置 (lldb) l } - (void)rightBarButtonAction { 命令“bt”也能查看程序运行的调用栈 (lldb) bt * t ...