STM32 lightweight implementation of Ring buffer.
Simple data structure that implements the FIFO (First-In-First-Out) ordering.
This simply means that the first item added to your queue is the first one out.
More info about, see wiki
- SPI buffering data stream
- Scheduling pool
- Event pool
- Specifically designed for embedded applications
- Single on init memory allocation, no memory leaks
- Simple implementation
- Constant time operations O1
- Fast array cleanup
- No data structure enlargement after initialization
How to add CPM to the project, check the link
CPMAddPackage(
NAME RingBuffer
GITHUB_REPOSITORY ximtech/RingBuffer
GIT_TAG origin/main)
target_link_libraries(${PROJECT_NAME} RingBuffer)
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})
# For Clion STM32 plugin generated Cmake use
target_link_libraries(${PROJECT_NAME}.elf RingBuffer)
Example of usage:
RingBuffer ringBuffer = getRingBufferInstance(4);
ringBufferAdd(ringBuffer, 1);
ringBufferAdd(ringBuffer, 2);
ringBufferAdd(ringBuffer, 3);
printf("Size: %d\n", getRingBufferSize(ringBuffer)); // 3
printf("Is not full: %s\n", isRingBufferNotFull(ringBuffer) ? "Yes" : "No"); // Yes
printf("Is empty: %s\n", isRingBufferEmpty(ringBuffer) ? "Yes" : "No"); // No
printf("Is not empty: %s\n", isRingBufferNotEmpty(ringBuffer) ? "Yes" : "No"); // Yes
while (isRingBufferNotEmpty(ringBuffer)) {
printf("%d ", ringBufferGet(ringBuffer)); // 1 2 3
}
printf("\n");
printf("Is empty: %s\n", isRingBufferEmpty(ringBuffer) ? "Yes" : "No"); // Yes
// add more elements than buffer size
ringBufferAdd(ringBuffer, 1);
ringBufferAdd(ringBuffer, 2);
ringBufferAdd(ringBuffer, 3);
ringBufferAdd(ringBuffer, 4);
ringBufferAdd(ringBuffer, 5);
while (isRingBufferNotEmpty(ringBuffer)) {
printf("%d ", ringBufferGet(ringBuffer)); // 2 3 4 5
}
ringBufferDelete(ringBuffer);