用C写一个串口接收,使用环形队列缓冲
时间: 2023-03-13 17:13:04 浏览: 35
我可以给你一个简单的示例程序: #include <stdio.h>
#include <string.h>
#include <stdlib.h>#define BUFFER_SIZE 8typedef struct {
unsigned char buffer[BUFFER_SIZE];
int head;
int tail;
int count;
} RingBuffer;// 初始化环形队列
void init_ring_buffer(RingBuffer *rb)
{
memset(rb->buffer, 0, BUFFER_SIZE);
rb->head = 0;
rb->tail = 0;
rb->count = 0;
}// 向环形队列放入数据
int put_data(RingBuffer *rb, unsigned char data)
{
if (rb->count == BUFFER_SIZE) {
return -1;
}
rb->buffer[rb->tail] = data;
rb->tail = (rb->tail + 1) % BUFFER_SIZE;
rb->count++;
return 0;
}// 从环形队列取出数据
int get_data(RingBuffer *rb, unsigned char *data)
{
if (rb->count == 0) {
return -1;
}
*data = rb->buffer[rb->head];
rb->head = (rb->head + 1) % BUFFER_SIZE;
rb->count--;
return 0;
}int main(void)
{
// 使用环形队列缓冲串口接收的数据
RingBuffer rb;
init_ring_buffer(&rb); // 串口接收到的数据
unsigned char data; // 将接收到的数据放入环形队列
put_data(&rb, data); // 从环形队列中取出数据
get_data(&rb, &data); return 0;
}