]> granicus.if.org Git - esp-idf/commitdiff
esp_ringbuf: fix default placement from flash to IRAM
authorMahavir Jain <mahavir@espressif.com>
Tue, 9 Oct 2018 11:56:14 +0000 (17:26 +0530)
committerMahavir Jain <mahavir@espressif.com>
Thu, 18 Oct 2018 04:34:07 +0000 (23:34 -0500)
In earlier change this component was decoupled from freertos and hence
regression was introduced which changed default placement to flash. Some
device drivers make use of ringbuffer while flash cache is being disabled
and hence default placement should instead be internal memory.

Closes: https://github.com/espressif/esp-idf/issues/2517
components/esp32/ld/esp32.common.ld
components/esp_ringbuf/test/test_ringbuf.c
components/freertos/component.mk

index 4e8382913ba665679a10912725809b2dcf88baa4..744fbc211659884e0086dd4c2ec22b830d1b1bc4 100644 (file)
@@ -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.*)
index e47512d8eccd38e0bd2240066a76a6071af98324..013685f4ffda18b98f9de3476dd270b15275bce8 100644 (file)
@@ -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() );
+}
index a10f84d8004a2e42afcaa3c5d6793bbf4cdf3dec..375ee5ae81d34e944da501ffe6fb634f8cc299b2 100644 (file)
@@ -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