esp_ringbuf: fix default placement from flash to IRAM

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
This commit is contained in:
Mahavir Jain 2018-10-09 17:26:14 +05:30
parent d91b18080b
commit 49130c6b34
3 changed files with 22 additions and 1 deletions

View 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.*)

View 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() );
}

View 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