From bbac402e80cdd15ceca98d00801a56b1294cd277 Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Nihei Date: Fri, 19 Aug 2022 16:00:25 -0300 Subject: [PATCH] esp32-s2: Fix stack area overlapping with ROM data reserved region Signed-off-by: Gustavo Henrique Nihei --- esp32s2-hal/ld/memory.x | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/esp32s2-hal/ld/memory.x b/esp32s2-hal/ld/memory.x index 20a1866e3e5..423709db429 100644 --- a/esp32s2-hal/ld/memory.x +++ b/esp32s2-hal/ld/memory.x @@ -21,11 +21,17 @@ STACK_SIZE = 8k; /* Specify main memory areas */ MEMORY { - vectors_seg ( RX ) : ORIGIN = 0x40022000, len = 1k /* SRAM0 */ + vectors_seg ( RX ) : ORIGIN = 0x40022000, len = 1k /* SRAM0 */ iram_seg ( RX ) : ORIGIN = 0x40022400, len = 128k-0x400 /* SRAM0 */ - dram_seg ( RW ) : ORIGIN = 0x3FFB0000 + RESERVE_DRAM, len = 176k - RESERVE_DRAM - reserved_for_boot_seg : ORIGIN = 0x3FFDC200, len = 144k /* SRAM1; reserved for static ROM usage; can be used for heap */ + dram_seg ( RW ) : ORIGIN = 0x3FFB0000 + RESERVE_DRAM, len = 192k - RESERVE_DRAM + + /* SRAM1; reserved for static ROM usage; can be used for heap. + Length based on the "_dram0_rtos_reserved_start" symbol from IDF used to delimit the + ROM data reserved region: + https://github.com/espressif/esp-idf/blob/bcb34ca7aef4e8d3b97d75ad069b960fb1c17c16/components/heap/port/esp32s2/memory_layout.c#L121-L122 + */ + reserved_for_boot_seg : ORIGIN = 0x3FFE0000, len = 0x1FA10 /* external flash The 0x20 offset is a convenience for the app binary image generation. @@ -156,13 +162,11 @@ SECTIONS { _external_ram_start = ABSOLUTE(ORIGIN(psram_seg)); _external_ram_end = ABSOLUTE(ORIGIN(psram_seg)+LENGTH(psram_seg)); -_heap_end = ABSOLUTE(ORIGIN(dram_seg))+LENGTH(dram_seg)+LENGTH(reserved_for_boot_seg) - 2*STACK_SIZE; +_heap_end = ABSOLUTE(ORIGIN(dram_seg))+LENGTH(dram_seg)+LENGTH(reserved_for_boot_seg) - STACK_SIZE; _text_heap_end = ABSOLUTE(ORIGIN(iram_seg)+LENGTH(iram_seg)); _external_heap_end = ABSOLUTE(ORIGIN(psram_seg)+LENGTH(psram_seg)); -_stack_start_cpu1 = _heap_end; -_stack_end_cpu1 = _stack_start_cpu1 + STACK_SIZE; -_stack_start_cpu0 = _stack_end_cpu1; +_stack_start_cpu0 = _heap_end; _stack_end_cpu0 = _stack_start_cpu0 + STACK_SIZE; EXTERN(DefaultHandler);