From dc53189e46797e2d8465b06bf3c28e37312b820a Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Sat, 1 Apr 2023 13:18:57 +0200 Subject: [PATCH] esp_ringbuf: Added functions to linker.lf file which can be placed in Flash This commit adds symbols from the ringbuf.c file which can be placed in Flash in order to free up IRAM space. --- components/esp_ringbuf/Kconfig | 7 ++++--- components/esp_ringbuf/linker.lf | 9 +++++++++ components/esp_ringbuf/test/test_ringbuf.c | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/components/esp_ringbuf/Kconfig b/components/esp_ringbuf/Kconfig index db646218c1..b0258c19b7 100644 --- a/components/esp_ringbuf/Kconfig +++ b/components/esp_ringbuf/Kconfig @@ -11,14 +11,15 @@ menu "ESP Ringbuf" config RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH bool "Place ISR ringbuf functions into flash" + depends on RINGBUF_PLACE_FUNCTIONS_INTO_FLASH default n help - Place non-ISR ringbuf functions (like xRingbufferSendFromISR/xRingbufferReceiveFromISR) into flash. + Place ISR ringbuf functions (like xRingbufferSendFromISR/xRingbufferReceiveFromISR) into flash. This frees up IRAM, but the functions can no longer be called when the cache is disabled or from an IRAM interrupt context. - This option is not compatible with ESP-IDF drivers which is configured to run the ISR from an IRAM context, - e.g. CONFIG_UART_ISR_IN_IRAM. + This option is not compatible with ESP-IDF drivers which are configured to + run the ISR from an IRAM context, e.g. CONFIG_UART_ISR_IN_IRAM. endmenu diff --git a/components/esp_ringbuf/linker.lf b/components/esp_ringbuf/linker.lf index fb7a09986d..89064751e9 100644 --- a/components/esp_ringbuf/linker.lf +++ b/components/esp_ringbuf/linker.lf @@ -8,6 +8,7 @@ entries: ringbuf: prvGetCurMaxSizeByteBuf (default) ringbuf: prvInitializeNewRingbuffer (default) ringbuf: prvReceiveGeneric (default) + ringbuf: prvGetFreeSize (default) ringbuf: vRingbufferDelete (default) ringbuf: vRingbufferGetInfo (default) ringbuf: vRingbufferReturnItem (default) @@ -15,11 +16,17 @@ entries: ringbuf: xRingbufferCanRead (default) ringbuf: xRingbufferCreate (default) ringbuf: xRingbufferCreateStatic (default) + ringbuf: xRingbufferCreateNoSplit (default) ringbuf: xRingbufferReceive (default) ringbuf: xRingbufferReceiveSplit (default) ringbuf: xRingbufferReceiveUpTo (default) ringbuf: xRingbufferRemoveFromQueueSetRead (default) ringbuf: xRingbufferSend (default) + ringbuf: xRingbufferSendAcquire (default) + ringbuf: xRingbufferSendComplete (default) + ringbuf: xRingbufferPrintInfo (default) + ringbuf: xRingbufferGetMaxItemSize (default) + ringbuf: xRingbufferGetCurFreeSize (default) if RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH = y: ringbuf: prvReturnItemByteBuf (default) @@ -32,7 +39,9 @@ entries: ringbuf: prvAcquireItemNoSplit (default) ringbuf: prvCheckItemFitsByteBuffer (default) ringbuf: prvCheckItemFitsDefault (default) + ringbuf: prvCheckItemAvail (default) ringbuf: prvSendItemDoneNoSplit (default) + ringbuf: prvReceiveGenericFromISR (default) ringbuf: xRingbufferSendFromISR (default) ringbuf: xRingbufferReceiveFromISR (default) ringbuf: xRingbufferReceiveSplitFromISR (default) diff --git a/components/esp_ringbuf/test/test_ringbuf.c b/components/esp_ringbuf/test/test_ringbuf.c index cd98cfbad7..e048d3c9f2 100644 --- a/components/esp_ringbuf/test/test_ringbuf.c +++ b/components/esp_ringbuf/test/test_ringbuf.c @@ -1019,6 +1019,7 @@ TEST_CASE("Test static ring buffer SMP", "[esp_ringbuf]") } #endif +#if !CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH && !CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH /* -------------------------- Test ring buffer IRAM ------------------------- */ static IRAM_ATTR __attribute__((noinline)) bool iram_ringbuf_test(void) @@ -1044,3 +1045,4 @@ TEST_CASE("Test ringbuffer functions work with flash cache disabled", "[esp_ring { TEST_ASSERT( iram_ringbuf_test() ); } +#endif /* !CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH && !CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH */