目录
1.MEMORY伪指令
2.SECTIONS伪指令
3.链接代码与存储单元的3个步骤:
CCS中CMD文件用于指定存储区域的划分,在使用中可根据系统给定的.cmd进行修改,建立适合自己使用的CMD文件。CMD文件中主要有两个常用的伪指令MEMORY和SECTIONS。
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长度。
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 |
.vectors:存放中断向量表。
.text:所有可以执行的程序代码和常量。
.cinit:存放程序中的变量初值和常量。
.const:包含字符串常量、浮点常量以及初始化的全局变量和静态变量(由const声明)的初始化和说明。
.econst:包含字符串常量和初始化的全局变量和静态变量(由far const声明)的初始化和说明。
.pinit:全局构造器(C++)程序列表。
.switch:包含switch声明的跳转地址列表。
在执行过程中可以被操作和改变,只有在它们被程序调用时才会分配响应的值。
.bss:为程序中全局变量和静态变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储在.bss空间中。
.ebss:为使用大寄存器模式时的全局变量和静态变量(由far声明)预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中。
.stack:为系统堆栈保留的空间,用于和函数传递变量或为局部变量分配空间。
.sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0。
.esysmem:为动态存储分配保留的空间。如果有far函数,此空间被相应的占用,如果没有的化,此空间保留为0。
链接器将输入文件中的每一个段链接起来,然后根据.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