DSP中的cmd文件
一、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文件的更多相关文章
- 【DSP开发】CMD文件
DSP的存储器的地址范围,CMD是主要是根据那个来编的. CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间. 所以不同的芯片就有不同大小的rom和ram.放用户程序的地方 ...
- DSP TMS320C6000基础学习(4)—— cmd文件分析
DSP中的CMD文件是链接命令文件(Linker Command File),以.cmd为后缀. 在分析cmd文件之前,必需先了解 (1)DSP具体芯片的内存映射(Memory Map) (2)知道点 ...
- 有些CCS工程中为什么会有两个CMD文件?
这里的CCS就是TI公司的Code Composer Studio 集成开发环境,所以这篇随笔也就是关于TI公司DSP开发过程中对于刚入门同学的一个常见问题了. 那作为一个初学者,对于CCS工程中的c ...
- DSP中CMD文件
DSP中CMD文件 (2012-12-26 20:54:17) 转载▼ 标签: 杂谈 分类: DSP FPGA DSP的存储器的地址范围,CMD是主要是根据那个来编的.CMD 它是用来分配rom和ra ...
- CCS中CMD文件解析
http://blog.csdn.net/u011392772/article/details/49760897 gel文件中主要包含了PLL.DDR等的初始化工作,具体可以看一下gel源码就明白了: ...
- CCS中cmd文件的编写
http://blog.sina.com.cn/s/blog_abe5740601015b3q.html CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件,其中比较关键的 ...
- cmd中执行jar文件命令(待参数)
cmd中执行jar文件命令(待参数) 1,jar文件路径:F:\products 2,cmd命令: --两个日期参数(空格隔开) java -jar F:\products\analysis.jar ...
- 记录自己在 cmd 中执行 jar 文件遇到的一些错误
记录自己在 cmd 中执行 jar 文件遇到的一些错误 场景: 请求接口,解析接口返回的 JSON 字符串并插入到我们的数据库里面. 情况: 项目在 eclipse 中正常运行,打成 jar 包后在 ...
- DSP6455的cmd文件
DSP6455的cmd文件 CMD 的专业名称叫链接器配置文件,存放链接器的配置信息,DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此需要定义 ...
随机推荐
- C++求斐波那契数
题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 …… ...
- 8.css边框
其实,与其将css盒模型称为是一个盒子,我更愿意将其称为卡片,或者是图画.因为相对于盒子的三维特效,网页的元素更像是二维的图画.而我们之间对元素尺寸之类的调整,更像是对画布的调整. 但是,就像我可以为 ...
- 刀哥多线程之一次性代码gcd-11-once
一次性执行 有的时候,在程序开发中,有些代码只想从程序启动就只执行一次,典型的应用场景就是"单例" // MARK: 一次性执行 - (void)once { static dis ...
- JavaScript高级程序设计之window对象
在浏览器中window对象实现了JavaScript中的Global对象: window对象是最顶层的对象: 所有其他全局的东西都可以通过它的属性检索到. ; window.aa = ; // 所有全 ...
- Java之XStream之下划线问题
XStream将Java对象序列为XML, 如果对象属性带有下划线,输出到XML时会转成"__"双下划. 网上很多资料说是Bug, XStream开发的大神没有哪么笨吧? 查了一下 ...
- 教你怎么安装Redis
以下命令以root用户运行:#cd /tmp/#wget http://redis.googlecode.com/files/redis-2.6.11.tar.gz#tar xzf redis-2.6 ...
- golang的goroutine与channel
Golang的goroutine是非抢占式的, 令人相当蛋疼! 有痛不能呻吟...只能配合channel在各goroutine之间传递信号来实现抢占式, 而这形成了golang最灵活与最具性能的核心. ...
- swift 基于SDK8.0 获取当前时间
var date = NSDate.date() var timeFormatter = NSDateFormatter() timeFormatter.dateFormat = "MM-d ...
- [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象
<script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...
- C++ 类的前置声明
http://www.2cto.com/kf/201311/260705.html 今天在研究C++”接口与实现分离“的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过 ...