TMS320F2812的CMD文件配置详解
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 数据页任何地方
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 } |
为充分利用18k×16位的SARAM,本例将高地址的8k×16位的H0 SARAM区分成两部分,
一部分用做存放程序放在PAGE0里,一部分用做存放数据放在PAGE1中以达到合理的分配;
在cmd文件中包括各种各样的链接器选项,每种选项代表不同的含义。
其中,使用-m选项可以创建一个扩展名为.map的链接器(存储器)分配映射文件,
其语法为:-m filename(文件名)。
链接器的map文件描述以下内容:
存储器结构
输入和输出段的定位
在重新定位后外部符号的地址
通过map文件可以查看各段的分配情况,
包括段的起始地址,使用的字节数等配合cmd文件的使用,
可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。