#include <stdio.h>
#define MAXSIZE 8
int ringbuf[MAXSIZE];
int readldx=0;
int writeldx=0;
char full=0;
int next_data_handle(int addr)
{
return (addr+1) == MAXSIZE ? 0:(addr+1) ;
}
int get_size(void)
{
if(writeldx>=readldx) return (writeldx - readldx);
else return (MAXSIZE+writeldx - readldx);
}
int write_data(int data)
{
if((writeldx+1)%MAXSIZE!=readldx)
{
*(ringbuf+writeldx) = data;
writeldx = next_data_handle(writeldx);
if((writeldx+1)==readldx)
{
full = 1;
return -1; //返回这个之后,应用程序应该关闭串口,不再接收数据
}
}
return 0;
}
int read_data(int *dat)
{
if(writeld!=readldx)
{
readldx = next_data_handle(readldx);
*dat = *(ringbuf+readldx);
return 0;
}
else if(full==1)
{
full =0;
return -1; //返回这个之后,应用程序应该打开串口,继续接收数据
}
}
环形缓冲区的设计与实现
最新推荐文章于 2024-08-29 16:39:38 发布