一、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. List集合实战总结

    //构造被分隔的集合 List<object> list = new List<object>(); for (int i = 0; i <= 100; i++) { l ...

  2. 第一章 管理程序流(In .net4.5) 之 实现多线程和异步处理

    1. 概述 本章主要讲解.net4.5如何实现多线程和异步处理的相关内容. 2. 主要内容 2.1 理解线程 ① 使用Thread类   public static class Program   { ...

  3. Windows上搭建android开发环境

    在搭建android开发环境时需要四部分内容,框架如下 其中Java SDK和Eclipse在java4android中有过介绍,重点介绍ADT和Android SDK的安装. 安装Android S ...

  4. 浅议iOS网络数据解析

    /*------------------------------------ 数据解析: 1.JSON数据 --------------------------------*/ 重点:1.什么是JSO ...

  5. 删除字符串第一个byte

    删除字符串第一个byte   一种方式:   char * mag; char buff[1000]; char number; memcpy((char *)msg,buff,len); strnc ...

  6. java遍历Map的几种方式

    1.遍历map的几种方式:private Hashtable<String, String> emails = new Hashtable<String, String>(); ...

  7. hdu 3152 Obstacle Course

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3152 Obstacle Course Description You are working on t ...

  8. ios中如何计算(页数,行数,等等的算法)

    页数 = (总个数 + 每页最大显示个数 - 1) / 每页显示最大的个数

  9. CSS3设置字体

    @font-face{ font-family: myFirstFont;src: url('Sansation_Light.ttf')   ,url('Sansation_Light.eot'); ...

  10. Java Day 08

    数组工具对象建立 多个.java文件先编译谁 数组工具类中静态的使用 构造函数私有化 数组工具类--文档注释 设计模式 -- 单例设计模式 保证一个类在内存中的对象唯一性 1.不允许其他程序使用new ...