TMS320F2812的CMD文件配置详解
2016-01-16 23:18
218 查看
DSP存储器分为三个独立选择的空间-程序空间、数据空间和I/O空间:
1.程序存储器存放待执行的指令和执行中所用的系数(常数),
可使用片内或片外的RAM、ROM或EPROM等来构成;
2.数据存储器存放指令执行中产生的数据,
可使用片内或片外 的RAM和ROM来构成;
3.I/O存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。
表1是TMS320F2812的存储空间分布。
MEMORY:目标存储结构
使用PAGE分配地址空间,链接器把每一页当作独立的存储空间
PAGE0 程序存储器:存放程序
PAGE1 数据存储器:存放数据
SECTIONS:控制段的构成与地址分配
被初始化的sections(数据表和可执行代码)
.text 可执行代码、常数 程序页
.cinit 初始化的变量和常量表 程序页
.pinit 全局构造器(C++)初始化的变量和常量表 程序页
.const 字符串、声明、被初始化过的全局变量和静态变量 低数据位的数据页
.econst (在大存储器模式时使用)字符串、声明、被初始化过的全局变量和静态变量 数据页任何地方
.switch 转换声明设置的表格 可以是程序页也可以是低地址的数据页
未被初始化的sections(为程序运行中创建和存放的变量 在存储器中保留空间)
.bss 为全局变量和静态变量保留的空间
程序开始运行的时候,C导入路径把数据从.cinit节复制出去后存在.bss节 低地址数据页
.ebss 【在远(far)访问(只用于C)和大存储模式下】
为全局变量和静态变量保留的空间
程序开始运行的时候,C导入路径把数据从.cinit节复制出去后存在.bss节 数据页的任何地方
.stack 为C系统堆栈保留的空间
用来将声明传给函数及为局部变量保留 低地址数据页
.system 为动态存储器保留
用于malloc函数,如果不用malloc函数,此section为0 低地址数据页
.esystem【外部malloc函数】
用于外部malloc函数,如果不用外部malloc函数,此section为0 数据页任何地方
为充分利用18k×16位的SARAM,本例将高地址的8k×16位的H0 SARAM区分成两部分,
一部分用做存放程序放在PAGE0里,一部分用做存放数据放在PAGE1中以达到合理的分配;
在cmd文件中包括各种各样的链接器选项,每种选项代表不同的含义。
其中,使用-m选项可以创建一个扩展名为.map的链接器(存储器)分配映射文件,
其语法为:-m filename(文件名)。
链接器的map文件描述以下内容:
存储器结构
输入和输出段的定位
在重新定位后外部符号的地址
通过map文件可以查看各段的分配情况,
包括段的起始地址,使用的字节数等配合cmd文件的使用,
可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。
1.程序存储器存放待执行的指令和执行中所用的系数(常数),
可使用片内或片外的RAM、ROM或EPROM等来构成;
2.数据存储器存放指令执行中产生的数据,
可使用片内或片外 的RAM和ROM来构成;
3.I/O存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。
表1是TMS320F2812的存储空间分布。
MEMORY:目标存储结构
使用PAGE分配地址空间,链接器把每一页当作独立的存储空间
PAGE0 程序存储器:存放程序
PAGE1 数据存储器:存放数据
SECTIONS:控制段的构成与地址分配
被初始化的sections(数据表和可执行代码)
.text 可执行代码、常数 程序页
.cinit 初始化的变量和常量表 程序页
.pinit 全局构造器(C++)初始化的变量和常量表 程序页
.const 字符串、声明、被初始化过的全局变量和静态变量 低数据位的数据页
.econst (在大存储器模式时使用)字符串、声明、被初始化过的全局变量和静态变量 数据页任何地方
.switch 转换声明设置的表格 可以是程序页也可以是低地址的数据页
未被初始化的sections(为程序运行中创建和存放的变量 在存储器中保留空间)
.bss 为全局变量和静态变量保留的空间
程序开始运行的时候,C导入路径把数据从.cinit节复制出去后存在.bss节 低地址数据页
.ebss 【在远(far)访问(只用于C)和大存储模式下】
为全局变量和静态变量保留的空间
程序开始运行的时候,C导入路径把数据从.cinit节复制出去后存在.bss节 数据页的任何地方
.stack 为C系统堆栈保留的空间
用来将声明传给函数及为局部变量保留 低地址数据页
.system 为动态存储器保留
用于malloc函数,如果不用malloc函数,此section为0 低地址数据页
.esystem【外部malloc函数】
用于外部malloc函数,如果不用外部malloc函数,此section为0 数据页任何地方
MEMORY { PAGE0: /*ProgramMemory*/ RAMH0: origin=0x3F8000,length=0x001000 RAML0: origin=0x008000,length=0x001000 RAML1: origin=0x009000,length=0x001000 ROM: origin=0x3FF000,length=0x000FC0 RESET: origin=0x3FFFC0,length=0x00002M VECTORS: origin=0x3FFFC2,length=0x0003EM PAGE1: /*DataMemory*/ RAMM0: origin=0x000000,length=0x000400 RAMM1: origin=0x000400,length=0x000400 RAMH0: origin=0x3F9000,length=0x001000 } SECTIONS { /*AllocateProgramAreas*/ .cinit : > RAMH0 PAGE=0 .pinit : > RAMH0 PAGE=0 .text : > RAMH0 PAGE=0 .reset :> RESET, PAGE=0,TYPE=DSECT Vectors :> VECTORS, PAGE=0,TYPE=DSEC /*Allocateuninitalizeddatasections:*/ .stack :>RAMM0 PAGE=1 .ebss :>RAMH0 PAGE=1 .esysmem :>RAMH0 PAGE=1 .econst :>RAMM1 PAGE=1 .switch :>RAMM1 PAGE=1 } |
一部分用做存放程序放在PAGE0里,一部分用做存放数据放在PAGE1中以达到合理的分配;
在cmd文件中包括各种各样的链接器选项,每种选项代表不同的含义。
其中,使用-m选项可以创建一个扩展名为.map的链接器(存储器)分配映射文件,
其语法为:-m filename(文件名)。
链接器的map文件描述以下内容:
存储器结构
输入和输出段的定位
在重新定位后外部符号的地址
通过map文件可以查看各段的分配情况,
包括段的起始地址,使用的字节数等配合cmd文件的使用,
可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。
相关文章推荐
- C#语法杂谈
- [Leetcode] 15.3Sum @python
- 最速下降法 牛顿法 共轭梯度法
- EditPlus注册码在线生成,删除utf-8BOM,完美解决php文件乱码问题
- 段错误之#0 0x00000001 in ?? ()
- 电路板、集成电路、单片机、CPU、芯片的区别
- 数据类型与内存映像
- Json.Net 使用属性定义日期的序列化格式
- 记忆力的训练
- Android使用UncaughtExceptionHandler捕获全局异常
- VB6 codesmart 出现问题解决
- shell学习目录
- web.xml配置文件详解
- hadoop 2.5.2源码编译
- 新版本微信拆红包按钮“開”的判定--AccessibilityService
- JavaWeb注册并把数据存入数据库
- Tachyon的安装、配置和使用【仅供参考】
- oracle笔记整理15——性能调优之trace文件跟踪
- mariadb通用二进制格式安装
- SpringMVC基于代码的配置方式(零配置,无web.xml)