(二)
链接器对块的处理
链接器对块的处理有两个功能:其一,将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 /* 已初始化数据的存放位置 */ }
|