From 36a464f80223cf1ca96c859dcc265550bf8f7b39 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Thu, 26 Jan 2023 14:01:02 +0100 Subject: [PATCH] link data in flash to save on copy --- .../Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c | 8 ++++---- .../CORTEX_M3_MPS2_QEMU_GCC/scripts/mps2_m3.ld | 17 ++++++++--------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c b/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c index 41a561fd..0c8ea57a 100644 --- a/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c +++ b/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c @@ -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; ) diff --git a/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/scripts/mps2_m3.ld b/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/scripts/mps2_m3.ld index e3dee7e4..47644818 100644 --- a/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/scripts/mps2_m3.ld +++ b/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/scripts/mps2_m3.ld @@ -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);