(二)
链接器对块的处理
链接器对块的处理有两个功能:其一,将COFF目标文件中的块用来建立程序块和数据块,并将这些块组合成可以被DSP芯片执行的COFF输出模块;其二,链接器为输出块指定存储位置。
链接器提供两个命令实现上述功能:MEMORY和SECTIONS。MEMORY命令定义目标系统的存储器,程序员可以定义每一块存储器并指定起始地址和长度;SECTIONS命令用来定义输入块的组合和输出块在存储器中的存放位置。若不用MEMORY和SECTIONS命令,链接器采用缺省的分配算法;推荐使用这两个命令,但要注意这两个命令在CMD文件(链接器命令文件)中使用。
下面分析一个TMS320F240芯片的典型CMD 文件。(假设文件名EX1.CMD)
1、 CMD文件的构成及其详细解释
BOOT.OBJ /* F240的中断矢量表,参见后面的说明 */
EX1.OBJ /* 源程序编译后对应的目标文件 */
/* 若程序有多个目标文件,一块写在这里 */
-STACK 0X400 /* 设定系统堆栈 */
-C /* ROM初始化 */
-O EX1.OUT /* 输出的文件名 */
-M EX1.MAP /* 输出映像文件名 */
-L RTS2XX.LIB /* 链入RTS2XX.LIB库 */
MEMORY /*MEMORY命令规定系统的存储器配置 */
{
PAGE 0:ROM0: origin=0000h,length=003fh /* FLASH ROM */
PAGE 0:ROM1: origin=0040h,length=0200h /*FLASH ROM */
PAGE 0:ROM2: origin=0240h,length=3000h /* FLASH ROM */
PAGE 1:RAM_B2:origin=0060h,length=0020h /* 内部RAM B2 */
PAGE 1:RAM_B1:origin=0300h,length=0100h /* 内部RAM B1 */
PAGE 1:RAM_B0:origin=0100h,length=0100h /* 内部 RAM B0 */
PAGE 1:RAM_EX:origin=0d000h,length=2800h /* 外部扩展RAM */
}
SECTIONS /* SECTIONS 命令规定了程序中块的具体分配方法 */
{
.vectors:load=ROM0 /* 规定矢量表的存放位置 */
.cinit: load=ROM1 /* C初始化表的存放位置 */
.text: load=ROM2 /* 系统程序的存放位置 */
.bss load=RAM_B0 /*未初始化数据的存放位置 */
.const load=RAM_B1 /* 已初始化数据的存放位置 */
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |