ZHCU875Z August 2001 – October 2023 SM320F28335-EP
此示例链接了名为 demo.c.obj、ctrl.c.obj 和 tables.c.obj 的三个目标文件,并创建了名为 demo.out 的程序。
假定目标存储器具有以下程序存储器配置:
地址范围 | 内容 | ||
---|---|---|---|
0x0080 至 0x7000 | 片上 RAM_PG | ||
0xC000 至 0xFF80 | 片上 ROM |
地址范围 | 内容 | ||
---|---|---|---|
0x0080 至 0x0FFF | RAM 块 ONCHIP | ||
0x0060 至 0xFFFF | 映射的外部地址 EXT |
地址范围 | 内容 | ||
---|---|---|---|
存储器类型 | 地址范围 | 内容 |
---|---|---|
程序 | 0x0f0000 至 0x3fffbf | SLOW_MEM |
0x3fffc0 至 0x3fffff | 中断矢量表 | |
数据 | 0x000040 至 0x0001ff | 栈 |
0x000200 至 0x0007ff | FAST_MEM_1 | |
0x3ed000 至 0x3effff | FAST_MEM_2 |
输出段的构造方式如下:
链接器命令文件 demo.cmd 展示了此示例的链接器命令文件。输出映射文件,demo.map 展示了映射文件。
/***************************************************************/
/*** 指定链接器选项 ***/
/***************************************************************/
--output_file=demo.out /* 命名输出文件 */
--map_file=demo.map /* 创建输出映射 */
/***************************************************************/
/*** 指定输入文件 ***/
/***************************************************************/
demo.c.obj
fft.c.obj
tables.c.obj
/***************************************************************/
/*** 指定存储器配置 ***/
/***************************************************************/
MEMORY
{
PAGE 0: SLOW_MEM (R): origin=0x3f0000 length=0x00ffc0
VECTORS (R): origin=0x3fffc0 length=0x000040
PAGE 1: STACK (RW): origin=0x000040 length=0x0001c0
FAST_MEM_1 (RW): origin=0x000200 length=0x000600
FAST_MEM_2 (RW): origin=0x3ed000 length=0x003000
}
/***************************************************************/
/*** 指定输出段 ***/
/***************************************************************/
SECTIONS
{
vectors : { } > VECTORS page=0
.text : load = SLOW_MEM, page = 0 /* 在 .text 中链接 */
.data : fill = 07A1Ch, Load=FAST_MEM_1, page=1
{
tables.c.obj(.data) /* .data 输入 */
fft.c.obj(.data) /* .data 输入 */
.+= 100h; /* 创建空洞,用 0x07A1C 填充 */
}
var_defs : { } > FAST_MEM_2 page=1 /* RAM 中的 defs */
.ebss : page=1, fill=0x0ffff /*.ebss 填充和链接*/
}
/***************************************************************/
/*** 命令文件结束 ***/
/***************************************************************/
输入以下命令来调用链接器:
cl2000 --run_linker demo.cmd
这会创建一个如输出映射文件,demo.map 中所示的映射文件,以及一个名为 demo.out 的输出文件,可以在 TMS320C28x 上运行。
OUTPUT FILE NAME: <demo.out>
ENTRY POINT SYMBOL: 0
MEMORY CONFIGURATION
name origin length attributes fill
-------- -------- --------- ---------- --------
PAGE 0: SLOW_MEM 003f0000 0000ffc0 R
VECTORS 003fffc0 00000040 R
PAGE 1: STACK 00000040 000001c0 RW
FAST_MEM_1 00000200 00000600 RW
FAST_MEM_2 003ed000 00003000 RW
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
vectors 0 003fffc0 00000000 UNINITIALIZED
.text 0 003f0000 0000001a
003f0000 0000000e demo.c.obj (.text)
003f000e 00000000 tables.c.obj (.text)
003foooe 0000000c fft.c.obj (.text)
var_defs 1 003ed000 00000002
003ed000 00000002 demo.c.obj (var_defs)
.data 1 00000200 0000010c
00000200 00000004 tables.c.obj (.data)
00000204 00000000 fft.c.obj (.data)
00000204 00000100 --HOLE-- [fill = 7a1c]
00000304 00000008 demo.c.obj (.data)
.ebss 0 00000040 00000069
00000040 00000068 demo.c.obj (.ebss) [fill=ffff]
000000a8 00000000 fft.c.obj (.ebss)
000000a8 00000001 tables.c.obj (.ebss) [fill=ffff]
xy 1 000000a9 00000014 UNINITIALIZED
000000a9 00000014 demo.c.obj (xy)
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
address name
-------- ----
00000040 .ebss
00000200 .data
003f0000 .text
00000040 ARRAY
000000a8 TEMP
00000040 ___ebss__
00000200 ___data__
0000030c ___edata__
000000a9 ___end__
003f001a ___etext__
003f0000 ___text__
003f000e _func1
003f0000 _main
0000030c edata
000000a9 end
003f001a etext
GLOBAL SYMBOLS: SORTED BY Symbol Address
address name
-------- ----
00000040 ARRAY
00000040 ___ebss__
00000040 .ebss
000000a8 TEMP
000000a9 ___end__
000000a9 end
00000200 ___data__
00000200 .data
0000030c edata
0000030c ___edata__
003f0000 _main
003f0000 .text
003f0000 ___text__
003f000e _func1
003f001a etext
003f001a ___etext__
[16 symbols]