环形缓冲区实现 FIFO
时间: 2023-09-01 16:09:43 浏览: 173
环形缓冲区是一种实现先进先出(FIFO)功能的数据结构,常用于串口通信、音频处理等场景。它通过利用固定大小的缓冲区和读写指针,实现循环存储和数据的连续读写。
下面是一种常见的环形缓冲区实现方式:
```c
#define BUFFER_SIZE 10
typedef struct {
uint8_t buffer[BUFFER_SIZE];
uint8_t readIndex;
uint8_t writeIndex;
} CircularBuffer;
void bufferInit(CircularBuffer* buffer) {
buffer->readIndex = 0;
buffer->writeIndex = 0;
}
void bufferWrite(CircularBuffer* buffer, uint8_t data) {
buffer->buffer[buffer->writeIndex] = data;
buffer->writeIndex = (buffer->writeIndex + 1) % BUFFER_SIZE;
}
uint8_t bufferRead(CircularBuffer* buffer) {
uint8_t data = buffer->buffer[buffer->readIndex];
buffer->readIndex = (buffer->readIndex + 1) % BUFFER_SIZE;
return data;
}
```
使用上述代码可以实现一个大小为 BUFFER_SIZE 的环形缓冲区。通过调用 `bufferWrite()` 函数可以将数据写入缓冲区,调用 `bufferRead()` 函数可以从缓冲区读取数据。
需要注意的是,在多线程或中断环境下使用环形缓冲区时,需要使用适当的同步机制(如互斥锁或原子操作)来保证数据的一致性和线程安全性。
以上只是一种简单的环形缓冲区实现方式,实际应用中可能会根据需求进行相应的调整和优化。
阅读全文