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" ); __asm volatile ( "mov sp, r0" );
/* copy .data section from flash to RAM */ /* copy .data section from flash to RAM */
for( uint32_t * src = &_sidata, * dest = &_sdata; dest < &_edata; ) // for( uint32_t * src = &_sidata, * dest = &_sdata; dest < &_edata; )
{ // {
*dest++ = *src++; // *dest++ = *src++;
} // }
/* zero out .bss section */ /* zero out .bss section */
for( uint32_t * dest = &_sbss; dest < &_ebss; ) for( uint32_t * dest = &_sbss; dest < &_ebss; )

View File

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