have specific requirements, you'll want to leave this enabled so memory allocated
during boot-up can also be placed in SPI RAM.
+config SPIRAM_IGNORE_NOTFOUND
+ bool "Ignore PSRAM when not found"
+ default "n"
+ depends on SPIRAM_BOOT_INIT
+ help
+ Normally, if psram initialization is enabled during compile time but not found at runtime, it
+ is seen as an error making the ESP32 panic. If this is enabled, the ESP32 will keep on
+ running but will not add the (non-existing) RAM to any allocator.
+
choice SPIRAM_USE
prompt "SPI RAM access method"
default SPIRAM_USE_MALLOC
void __register_frame_info (const void *begin, struct object *ob);
extern char __eh_frame[];
+//If CONFIG_SPIRAM_IGNORE_NOTFOUND is set and external RAM is not found or errors out on testing, this is set to false.
+static bool s_spiram_okay=true;
+
/*
* We arrive here after the bootloader finished loading the program from flash. The hardware is mostly uninitialized,
* and the app CPU is in reset. We do have a stack, so we can do the initialization in C.
#if CONFIG_SPIRAM_BOOT_INIT
esp_spiram_init_cache();
if (esp_spiram_init() != ESP_OK) {
+#if CONFIG_SPIRAM_IGNORE_NOTFOUND
+ ESP_EARLY_LOGI(TAG, "Failed to init external RAM; continuing without it.");
+ s_spiram_okay = false;
+#else
ESP_EARLY_LOGE(TAG, "Failed to init external RAM!");
abort();
+#endif
}
#endif
#if CONFIG_SPIRAM_MEMTEST
- bool ext_ram_ok=esp_spiram_test();
- if (!ext_ram_ok) {
- ESP_EARLY_LOGE(TAG, "External RAM failed memory test!");
- abort();
+ if (s_spiram_okay) {
+ bool ext_ram_ok=esp_spiram_test();
+ if (!ext_ram_ok) {
+ ESP_EARLY_LOGE(TAG, "External RAM failed memory test!");
+ abort();
+ }
}
#endif
esp_err_t err;
esp_setup_syscall_table();
+ if (s_spiram_okay) {
#if CONFIG_SPIRAM_BOOT_INIT && (CONFIG_SPIRAM_USE_CAPS_ALLOC || CONFIG_SPIRAM_USE_MALLOC)
- esp_err_t r=esp_spiram_add_to_heapalloc();
- if (r != ESP_OK) {
- ESP_EARLY_LOGE(TAG, "External RAM could not be added to heap!");
- abort();
- }
+ esp_err_t r=esp_spiram_add_to_heapalloc();
+ if (r != ESP_OK) {
+ ESP_EARLY_LOGE(TAG, "External RAM could not be added to heap!");
+ abort();
+ }
#if CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL
- r=esp_spiram_reserve_dma_pool(CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL);
- if (r != ESP_OK) {
- ESP_EARLY_LOGE(TAG, "Could not reserve internal/DMA pool!");
- abort();
- }
+ r=esp_spiram_reserve_dma_pool(CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL);
+ if (r != ESP_OK) {
+ ESP_EARLY_LOGE(TAG, "Could not reserve internal/DMA pool!");
+ abort();
+ }
#endif
#if CONFIG_SPIRAM_USE_MALLOC
- heap_caps_malloc_extmem_enable(CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL);
+ heap_caps_malloc_extmem_enable(CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL);
#endif
#endif
+ }
//Enable trace memory and immediately start trace.
#if CONFIG_ESP32_TRAX