ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
此示例链接了名为 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 |
地址范围 | 内容 | ||
---|---|---|---|
0x00000000 至 0x00001000 | SLOW_MEM | ||
0x00001000 至 0x00002000 | FAST_MEM | ||
0x08000000 至 0x08000400 | EEPROM |
输出段的构造方式如下:
链接器命令文件 demo.cmd 展示了此示例的链接器命令文件。输出映射文件,demo.map 展示了映射文件。
/*****************************************************************************/
/*** 指定链接选项 ***/
/*****************************************************************************/
--entry_point SETUP /* 定义程序入口点 */
--output_file=demo.out /* 命名输出文件 */
--map_file=demo.map /* 创建输出映射文件 */
/*****************************************************************************/
/*** 指定输入文件 ***/
/*****************************************************************************/
demo.c.obj
ctrl.c.obj
tables.c.obj
/*****************************************************************************/
/*** 指定存储器配置 ***/
/*****************************************************************************/
MEMORY
{
FAST_MEM : org = 0x00000000 len = 0x00001000 /* PROGRAM MEMORY (ROM) */
SLOW_MEM : org = 0x00001000 len = 0x00001000 /* DATA MEMORY (RAM) */
EEPROM : org = 0x08000000 len = 0x00000400 /* COEFFICIENTS (EEPROM) */
}
/*****************************************************************************/
/* 指定输出段 */
/*****************************************************************************/
SECTIONS
{
.text : {} > FAST_MEM /* 将所有 .text 段链接到 ROM */
.intvecs : {} > 0x0 /* 链接 0x0 处的中断矢量 */
.data : /* 链接 .data 段 */
{
tables.c.obj(.data)
.= 0x400; /* 在块的末尾创建空洞 */
} > EEPROM, fill = 0xFF00FF00 /* 填充并链接至 EEPROM */
ctrl_vars: /* 为 ctrl 变量创建新段 */
{
ctrl.c.obj(.bss)
} > SLOW_MEM, fill = 0x00000100 /* 用 0x100 填充并链接至 RAM */
.bss : {} > SLOW_MEM /* 将剩余 .bss 段链接到 RAM */
}
/*****************************************************************************/
/*** 命令文件结束 ***/
/*****************************************************************************/
输入以下命令来调用链接器:
armcl --run_linker demo.cmd
这会创建一个如输出映射文件,demo.map 中所示的映射文件,以及一个名为 demo.out 的输出文件,可以在 ARM 器件 上运行。
OUTPUT FILE NAME: <demo.out>
ENTRY POINT SYMBOL: "SETUP" address: 000000d4
MEMORY CONFIGURATION
name origin length attributes fill
-------- -------- --------- ---------- --------
FAST_MEM 00000000 000001000 RWIX
SLOW_MEM 00001000 000001000 RWIX
EEPROM 08000000 000000400 RWIX
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.text 0 00000020 00000138
00000020 000000a0 ctrl.c.obj (.text)
000000c0 00000000 tables.c.obj (.text)
000000c0 00000098 demo.c.obj (.text)
.intvecs 0 00000000 00000020
00000000 00000020 tables.c.obj (.intvecs)
.data 0 08000000 00000400
08000000 00000168 tables.c.obj (.data)
08000168 00000298 --HOLE-- [fill = ff00ff00]
08000400 00000000 ctrl.c.obj (.data)
08000400 00000000 demo.c.obj (.data)
ctrl_var 0 00001000 00000500
00001000 00000500 ctrl.c.obj (.bss) [fill = 00000100]
.bss 0 00001500 00000100 UNINITIALIZED
00001500 00000100 demo.c.obj (.bss)
00001600 00000000 tables.c.obj (.bss)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
000000d4 SETUP 00000020 clear
00000020 clear 000000b8 set
000000b8 set 000000c0 x42
000000c0 x42 000000d4 SETUP
[4 symbols]