From 152043d469f26f71f1e67590daad22ddf949d5b4 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Thu, 30 Aug 2018 15:59:01 +0530 Subject: [PATCH] esp_ringbuf: move ringbuf to seperate component Signed-off-by: Mahavir Jain --- components/driver/CMakeLists.txt | 2 +- components/esp_ringbuf/CMakeLists.txt | 6 +++ components/esp_ringbuf/component.mk | 0 .../include/freertos/ringbuf.h | 0 .../{freertos => esp_ringbuf}/ringbuf.c | 52 +++++++++---------- components/esp_ringbuf/test/component.mk | 5 ++ .../test/test_ringbuf.c | 0 components/freertos/CMakeLists.txt | 2 - docs/Doxyfile | 3 +- 9 files changed, 40 insertions(+), 30 deletions(-) create mode 100644 components/esp_ringbuf/CMakeLists.txt create mode 100644 components/esp_ringbuf/component.mk rename components/{freertos => esp_ringbuf}/include/freertos/ringbuf.h (100%) rename components/{freertos => esp_ringbuf}/ringbuf.c (97%) create mode 100644 components/esp_ringbuf/test/component.mk rename components/{freertos => esp_ringbuf}/test/test_ringbuf.c (100%) diff --git a/components/driver/CMakeLists.txt b/components/driver/CMakeLists.txt index 5e396ede55..13cfd703c4 100644 --- a/components/driver/CMakeLists.txt +++ b/components/driver/CMakeLists.txt @@ -23,6 +23,6 @@ set(COMPONENT_SRCS "can.c" set(COMPONENT_ADD_INCLUDEDIRS "include") set(COMPONENT_PRIV_INCLUDEDIRS "include/driver") -set(COMPONENT_REQUIRES) +set(COMPONENT_REQUIRES esp_ringbuf) register_component() diff --git a/components/esp_ringbuf/CMakeLists.txt b/components/esp_ringbuf/CMakeLists.txt new file mode 100644 index 0000000000..9117521a27 --- /dev/null +++ b/components/esp_ringbuf/CMakeLists.txt @@ -0,0 +1,6 @@ +set(COMPONENT_ADD_INCLUDEDIRS "include") +set(COMPONENT_SRCS "ringbuf.c") + +set(COMPONENT_REQUIRES) + +register_component() diff --git a/components/esp_ringbuf/component.mk b/components/esp_ringbuf/component.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/components/freertos/include/freertos/ringbuf.h b/components/esp_ringbuf/include/freertos/ringbuf.h similarity index 100% rename from components/freertos/include/freertos/ringbuf.h rename to components/esp_ringbuf/include/freertos/ringbuf.h diff --git a/components/freertos/ringbuf.c b/components/esp_ringbuf/ringbuf.c similarity index 97% rename from components/freertos/ringbuf.c rename to components/esp_ringbuf/ringbuf.c index 606cea148d..9a7117b74c 100644 --- a/components/freertos/ringbuf.c +++ b/components/esp_ringbuf/ringbuf.c @@ -14,10 +14,10 @@ #include #include -#include "FreeRTOS.h" -#include "task.h" -#include "semphr.h" -#include "ringbuf.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "freertos/ringbuf.h" //32-bit alignment macros #define rbALIGN_SIZE( xSize ) ( ( xSize + portBYTE_ALIGNMENT_MASK ) & ~portBYTE_ALIGNMENT_MASK ) @@ -566,7 +566,7 @@ static BaseType_t prvReceiveGeneric(Ringbuffer_t *pxRingbuffer, void **pvItem1, } //Semaphore obtained, check if item can be retrieved - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); if (prvCheckItemAvail(pxRingbuffer) == pdTRUE) { //Item is available for retrieval BaseType_t xIsSplit; @@ -591,14 +591,14 @@ static BaseType_t prvReceiveGeneric(Ringbuffer_t *pxRingbuffer, void **pvItem1, if (pxRingbuffer->xItemsWaiting > 0) { xReturnSemaphore = pdTRUE; } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); break; } //No item available for retrieval, adjust ticks and take the semaphore again if (xTicksToWait != portMAX_DELAY) { xTicksRemaining = xTicksEnd - xTaskGetTickCount(); } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); /* * Gap between critical section and re-acquiring of the semaphore. If * semaphore is given now, priority inversion might occur (see docs) @@ -616,7 +616,7 @@ static BaseType_t prvReceiveGenericFromISR(Ringbuffer_t *pxRingbuffer, void **pv BaseType_t xReturn = pdFALSE; BaseType_t xReturnSemaphore = pdFALSE; - taskENTER_CRITICAL_ISR(&pxRingbuffer->mux); + portENTER_CRITICAL_ISR(&pxRingbuffer->mux); if(prvCheckItemAvail(pxRingbuffer) == pdTRUE) { BaseType_t xIsSplit; if (pxRingbuffer->uxRingbufferFlags & rbBYTE_BUFFER_FLAG) { @@ -641,7 +641,7 @@ static BaseType_t prvReceiveGenericFromISR(Ringbuffer_t *pxRingbuffer, void **pv xReturnSemaphore = pdTRUE; } } - taskEXIT_CRITICAL_ISR(&pxRingbuffer->mux); + portEXIT_CRITICAL_ISR(&pxRingbuffer->mux); if (xReturnSemaphore == pdTRUE) { xSemaphoreGiveFromISR(pxRingbuffer->xItemsBufferedSemaphore, NULL); //Give semaphore back so other tasks can retrieve @@ -766,7 +766,7 @@ BaseType_t xRingbufferSend(RingbufHandle_t xRingbuffer, const void *pvItem, size break; } //Semaphore obtained, check if item can fit - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); if(pxRingbuffer->xCheckItemFits(pxRingbuffer, xItemSize) == pdTRUE) { //Item will fit, copy item pxRingbuffer->vCopyItem(pxRingbuffer, pvItem, xItemSize); @@ -775,14 +775,14 @@ BaseType_t xRingbufferSend(RingbufHandle_t xRingbuffer, const void *pvItem, size if (prvGetFreeSize(pxRingbuffer) > 0) { xReturnSemaphore = pdTRUE; } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); break; } //Item doesn't fit, adjust ticks and take the semaphore again if (xTicksToWait != portMAX_DELAY) { xTicksRemaining = xTicksEnd - xTaskGetTickCount(); } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); /* * Gap between critical section and re-acquiring of the semaphore. If * semaphore is given now, priority inversion might occur (see docs) @@ -815,7 +815,7 @@ BaseType_t xRingbufferSendFromISR(RingbufHandle_t xRingbuffer, const void *pvIte //Attempt to send an item BaseType_t xReturn; BaseType_t xReturnSemaphore = pdFALSE; - taskENTER_CRITICAL_ISR(&pxRingbuffer->mux); + portENTER_CRITICAL_ISR(&pxRingbuffer->mux); if (pxRingbuffer->xCheckItemFits(xRingbuffer, xItemSize) == pdTRUE) { pxRingbuffer->vCopyItem(xRingbuffer, pvItem, xItemSize); xReturn = pdTRUE; @@ -826,7 +826,7 @@ BaseType_t xRingbufferSendFromISR(RingbufHandle_t xRingbuffer, const void *pvIte } else { xReturn = pdFALSE; } - taskEXIT_CRITICAL_ISR(&pxRingbuffer->mux); + portEXIT_CRITICAL_ISR(&pxRingbuffer->mux); if (xReturn == pdTRUE) { //Indicate item was successfully sent @@ -997,9 +997,9 @@ void vRingbufferReturnItem(RingbufHandle_t xRingbuffer, void *pvItem) configASSERT(pxRingbuffer); configASSERT(pvItem != NULL); - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); pxRingbuffer->vReturnItem(pxRingbuffer, (uint8_t *)pvItem); - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); xSemaphoreGive(pxRingbuffer->xFreeSpaceSemaphore); } @@ -1009,9 +1009,9 @@ void vRingbufferReturnItemFromISR(RingbufHandle_t xRingbuffer, void *pvItem, Bas configASSERT(pxRingbuffer); configASSERT(pvItem != NULL); - taskENTER_CRITICAL_ISR(&pxRingbuffer->mux); + portENTER_CRITICAL_ISR(&pxRingbuffer->mux); pxRingbuffer->vReturnItem(pxRingbuffer, (uint8_t *)pvItem); - taskEXIT_CRITICAL_ISR(&pxRingbuffer->mux); + portEXIT_CRITICAL_ISR(&pxRingbuffer->mux); xSemaphoreGiveFromISR(pxRingbuffer->xFreeSpaceSemaphore, pxHigherPriorityTaskWoken); } @@ -1045,9 +1045,9 @@ size_t xRingbufferGetCurFreeSize(RingbufHandle_t xRingbuffer) configASSERT(pxRingbuffer); size_t xFreeSize; - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); xFreeSize = pxRingbuffer->xGetCurMaxSize(pxRingbuffer); - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); return xFreeSize; } @@ -1057,7 +1057,7 @@ BaseType_t xRingbufferAddToQueueSetRead(RingbufHandle_t xRingbuffer, QueueSetHan configASSERT(pxRingbuffer); BaseType_t xReturn; - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); //Cannot add semaphore to queue set if semaphore is not empty. Temporarily hold semaphore BaseType_t xHoldSemaphore = xSemaphoreTake(pxRingbuffer->xItemsBufferedSemaphore, 0); xReturn = xQueueAddToSet(pxRingbuffer->xItemsBufferedSemaphore, xQueueSet); @@ -1065,7 +1065,7 @@ BaseType_t xRingbufferAddToQueueSetRead(RingbufHandle_t xRingbuffer, QueueSetHan //Return semaphore if temporarily held configASSERT(xSemaphoreGive(pxRingbuffer->xItemsBufferedSemaphore) == pdTRUE); } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); return xReturn; } @@ -1083,7 +1083,7 @@ BaseType_t xRingbufferRemoveFromQueueSetRead(RingbufHandle_t xRingbuffer, QueueS configASSERT(pxRingbuffer); BaseType_t xReturn; - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); //Cannot remove semaphore from queue set if semaphore is not empty. Temporarily hold semaphore BaseType_t xHoldSemaphore = xSemaphoreTake(pxRingbuffer->xItemsBufferedSemaphore, 0); xReturn = xQueueRemoveFromSet(pxRingbuffer->xItemsBufferedSemaphore, xQueueSet); @@ -1091,7 +1091,7 @@ BaseType_t xRingbufferRemoveFromQueueSetRead(RingbufHandle_t xRingbuffer, QueueS //Return semaphore if temporarily held configASSERT(xSemaphoreGive(pxRingbuffer->xItemsBufferedSemaphore) == pdTRUE); } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); return xReturn; } @@ -1100,7 +1100,7 @@ void vRingbufferGetInfo(RingbufHandle_t xRingbuffer, UBaseType_t *uxFree, UBaseT Ringbuffer_t *pxRingbuffer = (Ringbuffer_t *)xRingbuffer; configASSERT(pxRingbuffer); - taskENTER_CRITICAL(&pxRingbuffer->mux); + portENTER_CRITICAL(&pxRingbuffer->mux); if (uxFree != NULL) { *uxFree = (UBaseType_t)(pxRingbuffer->pucFree - pxRingbuffer->pucHead); } @@ -1113,7 +1113,7 @@ void vRingbufferGetInfo(RingbufHandle_t xRingbuffer, UBaseType_t *uxFree, UBaseT if (uxItemsWaiting != NULL) { *uxItemsWaiting = (UBaseType_t)(pxRingbuffer->xItemsWaiting); } - taskEXIT_CRITICAL(&pxRingbuffer->mux); + portEXIT_CRITICAL(&pxRingbuffer->mux); } void xRingbufferPrintInfo(RingbufHandle_t xRingbuffer) diff --git a/components/esp_ringbuf/test/component.mk b/components/esp_ringbuf/test/component.mk new file mode 100644 index 0000000000..5dd172bdb7 --- /dev/null +++ b/components/esp_ringbuf/test/component.mk @@ -0,0 +1,5 @@ +# +#Component Makefile +# + +COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive diff --git a/components/freertos/test/test_ringbuf.c b/components/esp_ringbuf/test/test_ringbuf.c similarity index 100% rename from components/freertos/test/test_ringbuf.c rename to components/esp_ringbuf/test/test_ringbuf.c diff --git a/components/freertos/CMakeLists.txt b/components/freertos/CMakeLists.txt index bcd9b0c42e..96a0d2b5fc 100644 --- a/components/freertos/CMakeLists.txt +++ b/components/freertos/CMakeLists.txt @@ -7,7 +7,6 @@ set(COMPONENT_SRCS "FreeRTOS-openocd.c" "port.c" "portasm.S" "queue.c" - "ringbuf.c" "tasks.c" "timers.c" "xtensa_context.S" @@ -28,7 +27,6 @@ set_source_files_properties( event_groups.c timers.c queue.c - ringbuf.c PROPERTIES COMPILE_DEFINITIONS _ESP_FREERTOS_INTERNAL ) diff --git a/docs/Doxyfile b/docs/Doxyfile index 1db49e60cc..fd241f0191 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -179,7 +179,8 @@ INPUT = \ ../../components/freertos/include/freertos/semphr.h \ ../../components/freertos/include/freertos/timers.h \ ../../components/freertos/include/freertos/event_groups.h \ - ../../components/freertos/include/freertos/ringbuf.h \ + ### Ringbuffer + ../../components/esp_ringbuf/include/freertos/ringbuf.h \ ### Helper functions for error codes ../../components/esp32/include/esp_err.h \ ### System APIs