DSPF28335学习笔记之(1)CMD文件说明
目录
1.MEMORY伪指令
2.SECTIONS伪指令
3.链接代码与存储单元的3个步骤:
CCS中CMD文件用于指定存储区域的划分,在使用中可根据系统给定的.cmd进行修改,建立适合自己使用的CMD文件。CMD文件中主要有两个常用的伪指令MEMORY和SECTIONS。
1.MEMORY伪指令
MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度;它告诉链接程序怎样计算和分配空间,根据芯片不同存储空间大小不同。格式:
Name:origin=0x????,length=0x????
代表十六进制数,从0~F。例如想定义一段Flash存储空间,其长度为64kw,开始位置为0x300000,其格式如下:
MEMORY
{
FLASH:origin=0x300000,length=0x040000
}
需要说明:这里描述存储空间大小时,length=0x040000→(2^2)×(2^12)=64×(2^10)=64kw,即64k×16bit。
DSP的CMD采用分页制(page),其中PAGE0用于存放程序空间、PAGE1用于存放数据空间,PAGE里包含的区间名字与其后面的参数反映了该区间的起始地址和长度。
如,“PAGE0:DARAM0: o = 0x00080 l = 0x01F80”,o=origin起始地址,l=length长度。
2.SECTIONS伪指令
SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。SECTIONS部分,在程序里添加段名.XXXX(如.vectors.)用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。,
SECTIONS部分的段可分为初始化段和非初始化段。初始化段包含代码和常数等必须在DSP上电之后有效的数,故初始化块必须保存在如片内FLASH等非遗失性存储器中;非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如RAM。
表格1 .cmd文件中各个段的含义
名称 |
描述 |
链接位置 |
初始化的段 |
||
.text |
代码 |
Flash |
.cinit |
全局与静态变量的初始值 |
Flash |
.econst |
常数 |
Flash |
.switch |
Switch表达式的表格 |
Flash |
.pinit |
全局结构函数表 (C++中的constructor) |
Flash |
未初始化的段 |
||
.ebss |
全局与静态变量 |
RAM |
.stack |
堆栈空间 |
低64K字的RAM |
.esysmem |
Farmalloc函数的存储空间 |
RAM |
- (1)已初始化的段:.text,.cinit,.const,.econst,.pinit和.switch
.vectors:存放中断向量表。
.text:所有可以执行的程序代码和常量。
.cinit:存放程序中的变量初值和常量。
.const:包含字符串常量、浮点常量以及初始化的全局变量和静态变量(由const声明)的初始化和说明。
.econst:包含字符串常量和初始化的全局变量和静态变量(由far const声明)的初始化和说明。
.pinit:全局构造器(C++)程序列表。
.switch:包含switch声明的跳转地址列表。
- (2)非初始化的段:.bss,.ebss,.stack,.sysmem,和.esysmem
在执行过程中可以被操作和改变,只有在它们被程序调用时才会分配响应的值。
.bss:为程序中全局变量和静态变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储在.bss空间中。
.ebss:为使用大寄存器模式时的全局变量和静态变量(由far声明)预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中。
.stack:为系统堆栈保留的空间,用于和函数传递变量或为局部变量分配空间。
.sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0。
.esysmem:为动态存储分配保留的空间。如果有far函数,此空间被相应的占用,如果没有的化,此空间保留为0。
3.链接代码与存储单元的3个步骤
- 定义存储单元的不同区域(片上SRAM、Flash或者外部存储器),需要注意使用外部存储器时,需要使用外部存储器接口XINTF。
- 定义段与存储器区域的关联关系。
- 进行.obj文件与.cmd文件的链接。
链接器将输入文件中的每一个段链接起来,然后根据.cmd文件中MEMORY与SECTIONS命令的参数,将相应位置、长度的存储空间分配给段。
如果某文件例如.text很大时,编译显示超过内存范围,可以查看.map文件确定每个存储单元使用情况(或者每个变量等的地址及占用的存储空间);解决方法是:可以将其放入两个存储段,使用">>"及“|”将两个存储段。
例如:
MEMORY{
PAGE0:
DARAM4: o = 0x18000 l = 0x02000
DARAM5: o = 0x1A000 l = 0x02000
}
SECTIONS{
.text:{*(.text)} >> DARAM4|DARAM5
}
参考:1.网络;2.符晓, 朱洪顺《TMS320F2833x DSP应用开发与实践》背景航空航天大学出版社2013
DSPF28335学习笔记之(1)CMD文件说明相关推荐
- Unix原理与应用学习笔记----第六章 文件的基本属性2
Unix原理与应用学习笔记----第六章 文件的基本属性2 改变文件权限命令:chmod 提示:文件或目录创建后,就被赋予一组默认的权限.所有的用户都有读,只有文件的所有者才有写. 相对权限设置 Ch ...
- Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)
Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...
- oracle的脚本日志,学习笔记:Oracle alert日志文件巡检脚本
天萃荷净 分享一篇Oracle alert日志文件巡检脚本 每天都检查oracle日志,所以写了一个比较完善的shell,让其自动处理,在运行程序之前,需要在该脚本目录下新建tmp目录 #!/usr/ ...
- Linux学习笔记(二)——文件与磁盘系统
Linux学习笔记(二)--文件与磁盘系统 文件操作 ls [选项][目录名]-l :列出长数据串,包含文件的属性与权限数据等-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)- ...
- SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)...
本文将示例如何运用前篇所写知识来建立一个用户自定义的登录控件.此控件界面非常简单,主要涉及的知识点是: 如何创建用户控件(包括对此控件的自定义事件和属性的编写,此处我们将创建一个名为LoginBo ...
- Linux命令学习笔记之一目录与文件基本操作
目录操作 cd:进入目录 基本格式:cd 目录名 例子: 1).在当前目录进入子目录a,输入"cd a" 2).在当前目录进入根目录下的子目录tmp,输入"cd /tmp ...
- 【转】DCMTK开源库的学习笔记3:dcmtk文件中数据元的修改
转自:https://blog.csdn.net/zssureqh/article/details/8804736 dcm文件是医学领域DICOM3.0标准所对应的主要的文件格式.前两篇学习笔记中,学 ...
- linux在cd后直接显示文件格式,Linux命令学习笔记之一目录与文件基本操作
目录操作 cd:进入目录 基本格式:cd 目录名 例子: 1).在当前目录进入子目录a,输入"cd a" 2).在当前目录进入根目录下的子目录tmp,输入"cd /tmp ...
- SilverLight学习笔记--关于Silverlight资源文件(如:图片)的放置位置及其引用
Silverlight中有许多资源文件,例如:图片,音频.视频,甚至XML和XAML等非执行数据文件,在Silverlight中根据资源所处位置的不同而有所区别. 资源文件可分布在我们Silve ...
- python目录和文件的基本操作_python学习笔记(七)——文件和目录操作
目录和文件操作 语言只有和外部连起来操作才会实现更强大的功能,比如操作文件.数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中.更强大的是网络编程,当然这些后续都会学习.接下来学习pyth ...
最新文章
- 常考数据结构与算法:排序
- RMAN异机复制数据库(相同路径)
- XorPay.com 支付平台介绍【免费申请个人微信支付接口】
- 微软宣布公开预览Dev Spaces for AKS
- Python爬去知乎上问题下所有图片
- 服务器上次文件命令,服务器上次文件命令
- 【Servlet】HTTP请求中文乱码的问题
- gradle:Creating New Gradle Builds
- Python入门--字典生成式,生成字典的公式
- C语言编译-嵌入式系统
- 可执行MIPS指令的单周期CPU
- 根据用户输入的Email跳转到相应的邮箱登录页面【蕃薯耀分享】
- 宏定义编程软件_什么是计算机编程? 定义软件开发。
- linux+目录+配额,Linux磁盘配额管理
- d3dx9_35.dll如何修复
- Pantoea(泛菌属)——肠道内善恶兼备的神秘细菌
- Android进阶知识树——Android消息队列
- 分布式协调系统ZooKeeper的安装
- 数字逻辑基础:数制与码制之计数进位制
- HJ95.人民币转换