# ring buffer **Repository Path**: ee_ed/ring-buffer ## Basic Information - **Project Name**: ring buffer - **Description**: 在常规的环形缓冲区基础上,增加了多线程保护、性能优化可配等功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-04-22 - **Last Updated**: 2025-04-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 环形数据缓冲区 ## 简介 环形数据缓冲区也称做循环缓冲区、圆形缓冲区。是一种先进先出(FIFO)的数据结构,它把一个固定大小的缓冲区当作一个环,以便循环使用。环形数据缓冲区常用于通讯数据包接收等场景。 ## 说明 * 缓冲区的大小必须大于等于 2,否则无法实现环形缓冲区。 * 此当缓冲区满时,新的数据将无法写入。 * 缓冲区具备多线程操作保护,防止多线程操作时出现数据错乱。 * 当数据量较大时可采用`RING_BUFFER_USE_BIG_BLOCK_DATA`大块数据处理模式,提高内存拷贝的效率。 ## 使用案例 ~~~c #include #include #include #include "ring_buffer.h" #define RB_SIZE 10 // 1.定义变量 ring_buffer_t rb; uint8_t data[RB_SIZE] = {0}; int main() { uint8_t test_write_data[5] = {1, 2, 3, 4, 5}; uint8_t test_read_data[5] = {0}; // 2.初始化缓冲区 ring_buffer_init(&rb, data, RB_SIZE); // 3.写入数据 ring_buffer_write(&rb, test_write_data, 5); // 4.读取数据 ring_buffer_read(&rb, test_read_data, 5); for (int i = 0; i < 5; i++) { printf("%d ", test_read_data[i]); } return 0; } ~~~ ## 更新记录 | 日期 | 作者 | 更新内容 | | ---------- | -------- | -------------------- | | 2025/04/22 | Edward | 首次发布 |