Files
ETH_TCP_Demo/board/stm32f407ve/link.lds
2026-03-09 15:34:18 +08:00

185 lines
6.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.

/*
* STM32F407VE 芯片的 RT-Thread Nano 链接脚本
* 功能:定义内存布局和代码段分配,优化内存使用
* 适配硬件STM32F407VE (128KB RAM, 512KB FLASH, 64KB CCMRAM)
* 优化说明:
* 1. 增加了详细的内存布局注释
* 2. 添加了常用链接符号定义
* 3. 优化了段对齐和内存使用
* 4. 统一了注释风格
*/
/* =========================================== */
/* 链接脚本配置 */
/* =========================================== */
/* 程序入口点 */
ENTRY(Reset_Handler)
/* 用户模式栈的最高地址 */
_estack = 0x20020000; /* RAM 结束地址 (128KB RAM) */
/* 堆和栈配置 */
_Min_Heap_Size = 0x200; /* 堆的最小大小 (512字节) */
_Min_Stack_Size = 0x400; /* 栈的最小大小 (1024字节) */
/* =========================================== */
/* 内存区域定义 */
/* =========================================== */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K /* 主 RAM 区域,可读可写可执行 */
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K /* 核心耦合 RAM可读可写低延迟 */
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* FLASH 区域,可读可执行 */
}
/* =========================================== */
/* 输出段定义 */
/* =========================================== */
SECTIONS
{
/* ------------------------------------------- */
/* FLASH 区域段定义 */
/* ------------------------------------------- */
/* 中断向量表 - 启动代码首先放入 FLASH */
.isr_vector :
{
. = ALIGN(4); /* 4字节对齐 */
KEEP(*(.isr_vector)) /* 保留中断向量表(启动代码) */
. = ALIGN(4); /* 4字节对齐 */
} >FLASH /* 放入 FLASH 区域 */
/* 程序代码段 */
.text :
{
. = ALIGN(4); /* 4字节对齐 */
*(.text) /* .text 段(代码) */
*(.text*) /* .text* 段(代码) */
*(.glue_7) /* ARM 到 Thumb 代码的胶水代码 */
*(.glue_7t) /* Thumb 到 ARM 代码的胶水代码 */
*(.eh_frame) /* 异常处理帧信息 */
KEEP (*(.init)) /* 保留初始化相关代码 */
KEEP (*(.fini)) /* 保留结束相关代码 */
. = ALIGN(4); /* 4字节对齐 */
_etext = .; /* 代码结束地址 */
} >FLASH /* 放入 FLASH 区域 */
/* 常量数据段 */
.rodata :
{
. = ALIGN(4); /* 4字节对齐 */
*(.rodata) /* .rodata 段(常量、字符串等) */
*(.rodata*) /* .rodata* 段(常量、字符串等) */
. = ALIGN(4); /* 4字节对齐 */
} >FLASH /* 放入 FLASH 区域 */
/* ARM 异常表相关段 */
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
.ARM : {
__exidx_start = .; /* 异常索引表开始 */
*(.ARM.exidx*) /* ARM 异常索引表 */
__exidx_end = .; /* 异常索引表结束 */
} >FLASH
/* 初始化数组相关段 */
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .); /* 预初始化数组开始 */
KEEP (*(.preinit_array*)) /* 保留预初始化数组 */
PROVIDE_HIDDEN (__preinit_array_end = .); /* 预初始化数组结束 */
} >FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .); /* 初始化数组开始 */
KEEP (*(SORT(.init_array.*))) /* 保留排序后的初始化数组 */
KEEP (*(.init_array*)) /* 保留初始化数组 */
PROVIDE_HIDDEN (__init_array_end = .); /* 初始化数组结束 */
} >FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .); /* 结束数组开始 */
KEEP (*(SORT(.fini_array.*))) /* 保留排序后的结束数组 */
KEEP (*(.fini_array*)) /* 保留结束数组 */
PROVIDE_HIDDEN (__fini_array_end = .); /* 结束数组结束 */
} >FLASH
/* ------------------------------------------- */
/* RAM 区域段定义 */
/* ------------------------------------------- */
/* 用于启动代码初始化数据 */
_sidata = LOADADDR(.data); /* .data 段在 FLASH 中的加载地址 */
/* 初始化数据段 */
.data :
{
. = ALIGN(4); /* 4字节对齐 */
_sdata = .; /* 数据段开始地址 */
*(.data) /* .data 段 */
*(.data*) /* .data* 段 */
. = ALIGN(4); /* 4字节对齐 */
_edata = .; /* 数据段结束地址 */
} >RAM AT> FLASH /* 放入 RAM加载地址在 FLASH */
/* 未初始化数据段 */
. = ALIGN(4); /* 4字节对齐 */
.bss :
{
/* 启动代码使用此符号初始化 .bss 段 */
_sbss = .; /* BSS 段开始地址 */
__bss_start__ = _sbss; /* 兼容符号 */
*(.bss) /* .bss 段 */
*(.bss*) /* .bss* 段 */
*(COMMON) /* COMMON 段 */
. = ALIGN(4); /* 4字节对齐 */
_ebss = .; /* BSS 段结束地址 */
__bss_end__ = _ebss; /* 兼容符号 */
} >RAM /* 放入 RAM 区域 */
/* 用户堆和栈段 */
._user_heap_stack :
{
. = ALIGN(8); /* 8字节对齐 */
PROVIDE ( end = . ); /* 程序结束地址 */
PROVIDE ( _end = . ); /* 程序结束地址(兼容符号) */
. = . + _Min_Heap_Size; /* 堆空间 */
. = . + _Min_Stack_Size; /* 栈空间 */
. = ALIGN(8); /* 8字节对齐 */
} >RAM /* 放入 RAM 区域 */
/* 以太网 DMA 相关段 */
.RxDecripSection (NOLOAD) : { *(.RxDecripSection) } >RAM /* 接收描述符段 */
.TxDecripSection (NOLOAD) : { *(.TxDecripSection) } >RAM /* 发送描述符段 */
.RxArraySection (NOLOAD) : { *(.RxArraySection) } >RAM /* 接收数组段 */
.TxArraySection (NOLOAD) : { *(.TxArraySection) } >RAM /* 发送数组段 */
/* 堆起始地址 */
. = ALIGN(4); /* 4字节对齐 */
__heap_start__ = .; /* 堆开始地址 */
__heap_end__ = _estack; /* 堆结束地址(栈顶) */
/* ------------------------------------------- */
/* 特殊段处理 */
/* ------------------------------------------- */
/* 从标准库中移除信息 */
/DISCARD/ :
{
libc.a ( * ) /* 移除 libc 库信息 */
libm.a ( * ) /* 移除 libm 库信息 */
libgcc.a ( * ) /* 移除 libgcc 库信息 */
}
/* ARM 属性段 */
.ARM.attributes 0 : { *(.ARM.attributes) }
}
/* =========================================== */
/* 链接脚本结束 */
/* =========================================== */