RT-GasFlowMeter/linkscripts/STM32H750XBHx/link.lds
2025-07-15 23:14:00 +08:00

161 lines
5.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* STM32H750XBHx 的 GNU ld 链接脚本
*/
/* 程序入口点,设置为"used"避免被GC */
MEMORY
{
ROM (rx) : ORIGIN = 0x08000000, LENGTH = 128k /* 128K 内部Flash */
RAM (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K SRAM */
}
ENTRY(Reset_Handler) /* 入口点为复位处理函数 */
_system_stack_size = 0x400; /* 系统栈大小=1KB */
SECTIONS
{
.text : /* 代码段 */
{
. = ALIGN(4); /* 4字节对齐 */
_stext = .; /* 代码段起始地址 */
KEEP(*(.isr_vector)) /* 保留中断向量表(必须放在开头) */
. = ALIGN(4);
*(.text) /* 程序代码 */
*(.text.*) /* 程序子代码段 */
*(.rodata) /* 只读数据(常量) */
*(.rodata*)
*(.glue_7) /* ARM/Thumb胶合代码 */
*(.glue_7t) /* Thumb/ARM胶合代码 */
*(.gnu.linkonce.t*)
/* Finsh shell的符号表信息 */
. = ALIGN(4);
__fsymtab_start = .; /* Finsh符号表起始 */
KEEP(*(FSymTab)) /* 保留Finsh符号表 */
__fsymtab_end = .; /* Finsh符号表结束 */
/* 系统组件的符号表 */
. = ALIGN(4);
__vsymtab_start = .; /* 组件符号表起始 */
KEEP(*(VSymTab)) /* 保留组件符号表 */
__vsymtab_end = .; /* 组件符号表结束 */
/* utest测试框架的段信息 */
. = ALIGN(4);
__rt_utest_tc_tab_start = .; /* utest测试用例表起始 */
KEEP(*(UtestTcTab)) /* 保留测试用例表 */
__rt_utest_tc_tab_end = .; /* utest测试用例表结束 */
/* AT指令服务器的段信息 */
. = ALIGN(4);
__rtatcmdtab_start = .; /* AT指令表起始 */
KEEP(*(RtAtCmdTab)) /* 保留AT指令表 */
__rtatcmdtab_end = .; /* AT指令表结束 */
. = ALIGN(4);
/* RT-Thread初始化函数表 */
. = ALIGN(4);
__rt_init_start = .; /* 初始化函数表起始 */
KEEP(*(SORT(.rti_fn*))) /* 保留排序后的初始化函数指针 */
__rt_init_end = .; /* 初始化函数表结束 */
. = ALIGN(4);
/* C++构造函数表 */
PROVIDE(__ctors_start__ = .); /* 构造函数表起始 */
KEEP (*(SORT(.init_array.*))) /* 保留排序的构造函数 */
KEEP (*(.init_array)) /* 保留普通构造函数 */
PROVIDE(__ctors_end__ = .); /* 构造函数表结束 */
. = ALIGN(4);
_etext = .; /* 代码段结束地址 */
} > ROM = 0 /* 位于ROM区域填充0 */
/* .ARM.exidx 是已排序的,必须放在自己的输出段 */
__exidx_start = .; /* ARM异常索引起始 */
.ARM.exidx : /* ARM异常处理索引表 */
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
/* 以下变量用于启动时初始化.data段 */
_sidata = .; /* 初始化数据在ROM中的加载地址 */
} > ROM
__exidx_end = .; /* ARM异常索引结束 */
/* .data段 - 用于已初始化的数据 */
.data : AT (_sidata) /* AT指定运行时加载地址 */
{
. = ALIGN(4);
_sdata = . ; /* 数据段在RAM中的起始地址(运行时) */
*(.data) /* 已初始化数据 */
*(.data.*)
*(.gnu.linkonce.d*)
/* C++析构函数表 */
PROVIDE(__dtors_start__ = .); /* 析构函数表起始 */
KEEP(*(SORT(.dtors.*))) /* 保留排序的析构函数 */
KEEP(*(.dtors)) /* 保留普通析构函数 */
PROVIDE(__dtors_end__ = .); /* 析构函数表结束 */
. = ALIGN(4);
_edata = . ; /* 数据段在RAM中的结束地址(运行时) */
} >RAM /* 位于RAM区域 */
.stack : /* 系统栈段 */
{
. = ALIGN(4);
_sstack = .; /* 栈起始地址 */
. = . + _system_stack_size; /* 分配栈空间 */
. = ALIGN(4);
_estack = .; /* 栈结束地址 */
} >RAM /* 位于RAM区域 */
__bss_start = .; /* BSS段起始标记 */
.bss : /* 未初始化数据段 */
{
. = ALIGN(4);
_sbss = .; /* BSS段起始地址 */
*(.bss) /* 未初始化数据 */
*(.bss.*)
*(COMMON) /* 公共符号 */
. = ALIGN(4);
_ebss = . ; /* BSS段结束地址 */
*(.bss.init) /* 特殊用途的BSS初始化段 */
} > RAM /* 位于RAM区域 */
__bss_end = .; /* BSS段结束标记 */
_end = .; /* 程序内存结束标记 */
/* 以下为调试段,实际输出时不包含 */
/* Stabs调试节 */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF调试节 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
}