/* 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.*)
#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
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() );
+}
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