diff --git a/STM32/CM7/CMakeLists.txt b/STM32/CM7/CMakeLists.txt index c9241eb..36b9eae 100644 --- a/STM32/CM7/CMakeLists.txt +++ b/STM32/CM7/CMakeLists.txt @@ -59,6 +59,7 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE # Add sources to executable target_sources(${CMAKE_PROJECT_NAME} PRIVATE # Add user sources here + Core/Src/ring_buffer.c ) # Link directories setup diff --git a/STM32/CM7/Core/Inc/ring_buffer.h b/STM32/CM7/Core/Inc/ring_buffer.h index 70e808e..17590d7 100644 --- a/STM32/CM7/Core/Inc/ring_buffer.h +++ b/STM32/CM7/Core/Inc/ring_buffer.h @@ -6,9 +6,8 @@ typedef struct ring_buffer_t { uint32_t buffer[256]; uint8_t w_head; - uint8_t r_head; } ring_buffer_t; inline void ringBufferPush(ring_buffer_t *rb, uint32_t value); -inline int ringBufferPop(ring_buffer_t *rb, uint32_t *output); +inline uint32_t ringBufferRead(ring_buffer_t *rb, uint8_t idx); diff --git a/STM32/CM7/Core/Src/ring_buffer.c b/STM32/CM7/Core/Src/ring_buffer.c index 22b904c..c55b86c 100644 --- a/STM32/CM7/Core/Src/ring_buffer.c +++ b/STM32/CM7/Core/Src/ring_buffer.c @@ -9,20 +9,9 @@ inline void ringBufferPush(ring_buffer_t *rb, uint32_t value) { rb->buffer[rb->w_head] = value; rb->w_head++; - if (rb->w_head == rb->r_head) { - // if write head catches up to read head, crash program as consumer task - // should keep up with write head - assert(false); - } return; } -inline int ringBufferPop(ring_buffer_t *rb, uint32_t *output) { - if (rb->w_head == rb->r_head) { - // if read head is at write head, buffer is empty so nothing to pop - return 1; - } - *output = rb->buffer[rb->r_head]; - rb->r_head++; - return 0; +inline uint32_t ringBufferRead(ring_buffer_t *rb, uint8_t idx) { + return rb->buffer[rb->w_head - 1 - idx]; }