Skip to content

Commit a1c417c

Browse files
gustavoniheijessebraham
authored andcommitted
esp32-s2: Fix stack area overlapping with ROM data reserved region
Signed-off-by: Gustavo Henrique Nihei <[email protected]>
1 parent ede5007 commit a1c417c

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

esp32s2-hal/ld/memory.x

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,17 @@ STACK_SIZE = 8k;
2121
/* Specify main memory areas */
2222
MEMORY
2323
{
24-
vectors_seg ( RX ) : ORIGIN = 0x40022000, len = 1k /* SRAM0 */
24+
vectors_seg ( RX ) : ORIGIN = 0x40022000, len = 1k /* SRAM0 */
2525
iram_seg ( RX ) : ORIGIN = 0x40022400, len = 128k-0x400 /* SRAM0 */
2626

27-
dram_seg ( RW ) : ORIGIN = 0x3FFB0000 + RESERVE_DRAM, len = 176k - RESERVE_DRAM
28-
reserved_for_boot_seg : ORIGIN = 0x3FFDC200, len = 144k /* SRAM1; reserved for static ROM usage; can be used for heap */
27+
dram_seg ( RW ) : ORIGIN = 0x3FFB0000 + RESERVE_DRAM, len = 192k - RESERVE_DRAM
28+
29+
/* SRAM1; reserved for static ROM usage; can be used for heap.
30+
Length based on the "_dram0_rtos_reserved_start" symbol from IDF used to delimit the
31+
ROM data reserved region:
32+
https://github.com/espressif/esp-idf/blob/bcb34ca7aef4e8d3b97d75ad069b960fb1c17c16/components/heap/port/esp32s2/memory_layout.c#L121-L122
33+
*/
34+
reserved_for_boot_seg : ORIGIN = 0x3FFE0000, len = 0x1FA10
2935

3036
/* external flash
3137
The 0x20 offset is a convenience for the app binary image generation.
@@ -156,13 +162,11 @@ SECTIONS {
156162
_external_ram_start = ABSOLUTE(ORIGIN(psram_seg));
157163
_external_ram_end = ABSOLUTE(ORIGIN(psram_seg)+LENGTH(psram_seg));
158164

159-
_heap_end = ABSOLUTE(ORIGIN(dram_seg))+LENGTH(dram_seg)+LENGTH(reserved_for_boot_seg) - 2*STACK_SIZE;
165+
_heap_end = ABSOLUTE(ORIGIN(dram_seg))+LENGTH(dram_seg)+LENGTH(reserved_for_boot_seg) - STACK_SIZE;
160166
_text_heap_end = ABSOLUTE(ORIGIN(iram_seg)+LENGTH(iram_seg));
161167
_external_heap_end = ABSOLUTE(ORIGIN(psram_seg)+LENGTH(psram_seg));
162168

163-
_stack_start_cpu1 = _heap_end;
164-
_stack_end_cpu1 = _stack_start_cpu1 + STACK_SIZE;
165-
_stack_start_cpu0 = _stack_end_cpu1;
169+
_stack_start_cpu0 = _heap_end;
166170
_stack_end_cpu0 = _stack_start_cpu0 + STACK_SIZE;
167171

168172
EXTERN(DefaultHandler);

0 commit comments

Comments
 (0)