esp32s2: Add USE_FIXED_STATIC_RAM_SIZE feature

This feature exists on ESP32 and missed for ESP32S2. This commit adds it for esp32s2 as well.

Closes: IDF-1800
pull/5688/head
KonstantinKondrashov 2020-06-03 02:17:28 +08:00
rodzic d1bf7a8743
commit 96b3ab708a
3 zmienionych plików z 36 dodań i 3 usunięć

Wyświetl plik

@ -505,6 +505,25 @@ menu "ESP32S2-specific"
This option allows to place .rtc_data and .rtc_rodata sections into This option allows to place .rtc_data and .rtc_rodata sections into
RTC fast memory segment to free the slow memory region for ULP programs. RTC fast memory segment to free the slow memory region for ULP programs.
config ESP32S2_USE_FIXED_STATIC_RAM_SIZE
bool "Use fixed static RAM size"
default n
help
If this option is disabled, the DRAM part of the heap starts right after the .bss section,
within the dram0_0 region. As a result, adding or removing some static variables
will change the available heap size.
If this option is enabled, the DRAM part of the heap starts right after the dram0_0 region,
where its length is set with ESP32S2_FIXED_STATIC_RAM_SIZE
config ESP32S2_FIXED_STATIC_RAM_SIZE
hex "Fixed Static RAM size"
default 0x10000
range 0 0x34000
depends on ESP32S2_USE_FIXED_STATIC_RAM_SIZE
help
RAM size dedicated for static variables (.data & .bss sections).
config ESP32S2_ALLOW_RTC_FAST_MEM_AS_HEAP config ESP32S2_ALLOW_RTC_FAST_MEM_AS_HEAP
bool "Enable RTC fast memory for dynamic allocations" bool "Enable RTC fast memory for dynamic allocations"
depends on !ESP32S2_MEMPROT_FEATURE depends on !ESP32S2_MEMPROT_FEATURE

Wyświetl plik

@ -44,6 +44,17 @@
#define I_D_RAM_SIZE DATA_RAM_END - DRAM_ORG #define I_D_RAM_SIZE DATA_RAM_END - DRAM_ORG
#if defined(CONFIG_ESP32S2_USE_FIXED_STATIC_RAM_SIZE)
ASSERT((CONFIG_ESP32S2_FIXED_STATIC_RAM_SIZE <= I_D_RAM_SIZE),
"Fixed static ram data does not fit.")
#define STATIC_RAM_SIZE CONFIG_ESP32S2_FIXED_STATIC_RAM_SIZE
#else
#define STATIC_RAM_SIZE 0
#endif
MEMORY MEMORY
{ {
/* All these values assume the flash cache is on, and have the blocks this uses subtracted from the length /* All these values assume the flash cache is on, and have the blocks this uses subtracted from the length
@ -69,7 +80,7 @@ MEMORY
/* Shared data RAM, excluding memory reserved for bootloader and ROM bss/data/stack. */ /* Shared data RAM, excluding memory reserved for bootloader and ROM bss/data/stack. */
dram0_0_seg (RW) : org = DRAM_ORG, len = I_D_RAM_SIZE dram0_0_seg (RW) : org = DRAM_ORG, len = I_D_RAM_SIZE - STATIC_RAM_SIZE
#ifdef CONFIG_APP_BUILD_USE_FLASH_SECTIONS #ifdef CONFIG_APP_BUILD_USE_FLASH_SECTIONS
/* Flash mapped constant data */ /* Flash mapped constant data */
@ -93,7 +104,12 @@ MEMORY
rtc_data_seg(RW) : org = 0x3ff9e000, len = 0x2000 - ESP_BOOTLOADER_RESERVE_RTC rtc_data_seg(RW) : org = 0x3ff9e000, len = 0x2000 - ESP_BOOTLOADER_RESERVE_RTC
} }
#if defined(CONFIG_ESP32S2_USE_FIXED_STATIC_RAM_SIZE)
/* static data ends at defined address */
_static_data_end = DRAM_ORG + STATIC_RAM_SIZE;
#else
_static_data_end = _bss_end; _static_data_end = _bss_end;
#endif
_heap_end = 0x40000000; _heap_end = 0x40000000;

Wyświetl plik

@ -265,8 +265,6 @@ SECTIONS
. = ALIGN (8); . = ALIGN (8);
_bss_end = ABSOLUTE(.); _bss_end = ABSOLUTE(.);
/* The heap starts right after end of this section */
_heap_start = ABSOLUTE(.);
} > dram0_0_seg } > dram0_0_seg
/* When modifying the alignment, update tls_section_alignment in pxPortInitialiseStack */ /* When modifying the alignment, update tls_section_alignment in pxPortInitialiseStack */