link data in flash to save on copy

This commit is contained in:
Alwin Berger 2023-01-26 14:01:02 +01:00
parent aeb22a409c
commit 36a464f802
2 changed files with 12 additions and 13 deletions

View File

@ -52,10 +52,10 @@ void Reset_Handler( void )
__asm volatile ( "mov sp, r0" );
/* copy .data section from flash to RAM */
for( uint32_t * src = &_sidata, * dest = &_sdata; dest < &_edata; )
{
*dest++ = *src++;
}
// for( uint32_t * src = &_sidata, * dest = &_sdata; dest < &_edata; )
// {
// *dest++ = *src++;
// }
/* zero out .bss section */
for( uint32_t * dest = &_sbss; dest < &_ebss; )

View File

@ -26,15 +26,14 @@
MEMORY
{
FLASH (xr) : ORIGIN = 0x00000000, LENGTH = 4M /* to 0x00003FFF = 0x007FFFFF*/
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 4M /* to 0x21FFFFFF = 0xFFFFFF */
FLASH (xrw) : ORIGIN = 0x00000000, LENGTH = 4M /* to 0x00003FFF = 0x007FFFFF*/
}
ENTRY(Reset_Handler)
_Min_Heap_Size = 0x300000 ; /* Required amount of heap. */
_Min_Stack_Size = 0x4000 ; /* Required amount of stack. */
M_VECTOR_RAM_SIZE = (16 + 48) * 4;
_estack = ORIGIN(RAM) + LENGTH(RAM);
_estack = ORIGIN(FLASH) + LENGTH(FLASH);
SECTIONS
{
@ -85,7 +84,7 @@ SECTIONS
. += M_VECTOR_RAM_SIZE;
. = ALIGN(4);
__interrupts_ram_end = .;
} > RAM
} > FLASH
_sidata = LOADADDR(.data);
@ -96,7 +95,7 @@ SECTIONS
*(.data*)
. = ALIGN(4);
_edata = .;
} > RAM AT > FLASH
} > FLASH
.uninitialized (NOLOAD):
{
@ -106,7 +105,7 @@ SECTIONS
KEEP(*(.keep.uninitialized))
. = ALIGN(32);
__uninitialized_end = .;
} > RAM
} > FLASH
.bss :
{
@ -118,7 +117,7 @@ SECTIONS
. = ALIGN(4);
_ebss = .;
__bss_end__ = _ebss;
} >RAM
} >FLASH
.heap :
{
@ -130,11 +129,11 @@ SECTIONS
_heap_top = .;
. = . + _Min_Stack_Size;
. = ALIGN(8);
} >RAM
} >FLASH
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackTop = ORIGIN(FLASH) + LENGTH(FLASH);
__StackLimit = __StackTop - _Min_Stack_Size;
PROVIDE(__stack = __StackTop);