Files
RCU_C1P_Launcher/Ld/Link.ld
caocong 5e9338cee4 新增:串口通讯避障功能
​ 1、Launcher中的串口只使用串口0(调试串口)、串口2(主动RS485端口);串口1与串口3不使用,且不初始化。将串口通讯缓冲区修改为1100Byte。

​  目的:CH564由于将Launcher代码搬运到RAM中运行,因此可使用的变量大小只有32Kbyte。不使用的串口将不初始化,同时使用的通讯缓冲区将节约出来,否则RAM空间不够使用。

​ 2、串口2 - 增加RS485使能,同时通讯增加避障功能。
2026-01-19 16:39:22 +08:00

224 lines
5.0 KiB
Plaintext

ENTRY( _start )
__stack_size = 4096;
PROVIDE( _stack_size = __stack_size );
MEMORY
{
/* FLASH + RAM supports the following configuration
FLASH-80K + RAM-64K
FLASH-48K + RAM-96K
FLASH-16K + RAM-128K
*/
/* FLASH-16K + RAM-128K */
/*
FLASH (rx) : ORIGIN = 0x00000000 , LENGTH = 16K
FLASH1 (rx) : ORIGIN = 0x00004000 , LENGTH = 448K - 16K
RAM (xrw) : ORIGIN = 0x20000000 , LENGTH = 128K
*/
/*
FLASH (rx) : ORIGIN = 0x20000000 , LENGTH = 28K
FLASH1 (rx) : ORIGIN = 0x00028000 , LENGTH = 448K - 160K
RAM (xrw) : ORIGIN = 0x20007000 , LENGTH = 64K - 28K
*/
/* FLASH-48K + RAM-96K */
/*
FLASH (rx) : ORIGIN = 0x00000000 , LENGTH = 48K
FLASH1 (rx) : ORIGIN = 0x0000C000 , LENGTH = 448K - 48K
RAM (xrw) : ORIGIN = 0x20000000 , LENGTH = 96K
*/
/* FLASH-80K + RAM-64K */
/*
FLASH (rx) : ORIGIN = 0x00000000 , LENGTH = 80K
FLASH1 (rx) : ORIGIN = 0x00014000 , LENGTH = 448K - 80K
RAM (xrw) : ORIGIN = 0x20000000 , LENGTH = 64K
*/
FLASH (rx) : ORIGIN = 0x20000000 , LENGTH = 32K
FLASH1 (rx) : ORIGIN = 0x00014000 , LENGTH = 448K - 80K
RAM (xrw) : ORIGIN = 0x20008000 , LENGTH = 32K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.vector :
{
KEEP(*(.vector));
_endof_Vector = .;
ASSERT(_endof_Vector < ORIGIN(FLASH1), "The vector must maintain in 0-wait zone");
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _cache_beg = __cache_beg );
PROVIDE( _cache_end = __cache_end );
.text :
{
. = ALIGN(4);
KEEP(*libISP564.a:(.text))
KEEP(*libISP564.a:(.text.*))
KEEP(*libISP564.a:(.rodata))
KEEP(*libISP564.a:(.rodata.*))
_endof_Flashlib = .;
ASSERT(_endof_Flashlib < ORIGIN(FLASH1), "The Flash lib must maintain in 0-wait zone");
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.t.*)
*(.project_info)
. = ALIGN(4);
} >FLASH AT>FLASH
.text1 :
{
. = ALIGN(4);
PROVIDE( __cache_beg = .);
*(.cache);
*(.cache.*);
PROVIDE( __cache_end = .);
*(.non_0_wait);
*(.non_0_wait.*);
. = ALIGN(4);
} >FLASH1 AT>FLASH1
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
PROVIDE( __global_pointer$ = . + 0x800 );
*(.sdata .sdata.*)
*(.sdata2.*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
.stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
{
PROVIDE( _heap_end = . );
. = ALIGN(4);
PROVIDE(_susrstack = . );
. = . + __stack_size;
PROVIDE( _eusrstack = .);
} >RAM
}