diff --git a/components/esp32/ld/esp32.common.ld b/components/esp32/ld/esp32.common.ld index 4e8382913b..744fbc2116 100644 --- a/components/esp32/ld/esp32.common.ld +++ b/components/esp32/ld/esp32.common.ld @@ -153,6 +153,7 @@ SECTIONS /* Code marked as runnning out of IRAM */ _iram_text_start = ABSOLUTE(.); *(.iram1 .iram1.*) + *libesp_ringbuf.a:(.literal .text .literal.* .text.*) *libfreertos.a:(.literal .text .literal.* .text.*) *libheap.a:multi_heap.*(.literal .text .literal.* .text.*) *libheap.a:multi_heap_poisoning.*(.literal .text .literal.* .text.*) diff --git a/components/esp_ringbuf/test/test_ringbuf.c b/components/esp_ringbuf/test/test_ringbuf.c index e47512d8ec..013685f4ff 100644 --- a/components/esp_ringbuf/test/test_ringbuf.c +++ b/components/esp_ringbuf/test/test_ringbuf.c @@ -6,6 +6,7 @@ #include "freertos/semphr.h" #include "freertos/ringbuf.h" #include "driver/timer.h" +#include "esp_spi_flash.h" #include "unity.h" //Definitions used in multiple test cases @@ -604,3 +605,22 @@ TEST_CASE("Test ring buffer SMP", "[freertos]") vSemaphoreDelete(rx_done); vSemaphoreDelete(tasks_done); } + +static IRAM_ATTR __attribute__((noinline)) bool iram_ringbuf_test() +{ + bool result = true; + + spi_flash_guard_get()->start(); // Disables flash cache + RingbufHandle_t handle = xRingbufferCreate(CONT_DATA_TEST_BUFF_LEN, RINGBUF_TYPE_NOSPLIT); + result = result && (handle != NULL); + xRingbufferGetMaxItemSize(handle); + vRingbufferDelete(handle); + spi_flash_guard_get()->end(); // Re-enables flash cache + + return result; +} + +TEST_CASE("Test ringbuffer functions work with flash cache disabled", "[freertos]") +{ + TEST_ASSERT( iram_ringbuf_test() ); +} diff --git a/components/freertos/component.mk b/components/freertos/component.mk index a10f84d800..375ee5ae81 100644 --- a/components/freertos/component.mk +++ b/components/freertos/component.mk @@ -6,4 +6,4 @@ COMPONENT_ADD_LDFLAGS += -Wl,--undefined=uxTopUsedPriority COMPONENT_ADD_INCLUDEDIRS := include COMPONENT_PRIV_INCLUDEDIRS := include/freertos -tasks.o event_groups.o timers.o queue.o ringbuf.o: CFLAGS += -D_ESP_FREERTOS_INTERNAL +tasks.o event_groups.o timers.o queue.o: CFLAGS += -D_ESP_FREERTOS_INTERNAL