点击查看代码
LR_IROM1 0x0000C000 0x00014000 { ; load region size_region
ER_IROM1 0x0000C000 0x00014000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00003E00 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x20003E00 UNINIT 0x00000200 { ; NO_INIT RW data
.ANY (NO_INIT)
}
}
LR_IROM1:
0x0000C000:这是加载区域(Load Region)的起始地址。加载区域指的是程序在被加载到内存(如Flash)时的起始位置。
0x00014000:这是加载区域的大小,即该区域可以容纳的最大数据量。
{}:大括号内定义了该加载区域包含的执行区域(Execution Regions)。
ER_IROM1:
0x0000C000:这是执行区域的起始地址,与加载地址相同,意味着代码在加载后不会被移动到另一个位置执行。
0x00014000:这是执行区域的大小。
{}:大括号内定义了该执行区域包含的具体输入段(Input Sections)。
*.o (RESET, +First):这表示链接器将首先放置所有包含RESET段的.o文件。RESET段通常包含启动代码或复位向量。
*(InRoot$$Sections):这是一个特殊的段,用于包含编译器自动生成的启动代码和根节区。
.ANY (+RO):这表示链接器会将所有只读(RO)段放置在这里。
.ANY (+XO):这表示链接器会将所有执行(XO,即执行只读)段放置在这里。
RW_IRAM1:
0x20000000:这是读写数据(RW Data)区域的起始地址,通常位于SRAM(静态随机存取存储器)中。
0x00003E00:这是读写数据区域的大小。
{}:大括号内定义了该区域包含的具体输入段。
.ANY (+RW +ZI):这表示链接器会将所有读写(RW)和零初始化(ZI)段放置在这里。
RW_IRAM2:
0x20003E00:这是未初始化读写数据(No-Init RW Data)区域的起始地址,紧随RW_IRAM1之后。
UNINIT:这个关键字指示该区域的内容在程序启动时不会被初始化。
0x00000200:这是未初始化读写数据区域的大小。
{}:大括号内定义了该区域包含的具体输入段。
.ANY (NO_INIT):这表示链接器会将所有标记为NO_INIT的段放置在这里。这些段在程序启动时不会被初始化,可以保留它们在上电或重置后的原始值。
总的来说,这段链接脚本定义了如何将程序的代码、只读数据、读写数据和未初始化读写数据放置在目标硬件的内存中。这对于确保程序的正确执行和性能至关重要。
标签:RW,Script,读写,Linker,链接,区域,ANY,加载
From: https://www.cnblogs.com/optimusleo/p/18670824