怎么计算环形缓冲区长度
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/08 01:48:24
怎么计算环形缓冲区长度
定义了一个数组 Buff[200],想把它设计成环形缓冲区,
写指针:Ptr_ W
读指针:Ptr_R
问:这个读写之间的缓冲区的长度是怎么计算的呢,
用的c语言
定义了一个数组 Buff[200],想把它设计成环形缓冲区,
写指针:Ptr_ W
读指针:Ptr_R
问:这个读写之间的缓冲区的长度是怎么计算的呢,
用的c语言
![怎么计算环形缓冲区长度](/uploads/image/z/19713109-13-9.jpg?t=%E6%80%8E%E4%B9%88%E8%AE%A1%E7%AE%97%E7%8E%AF%E5%BD%A2%E7%BC%93%E5%86%B2%E5%8C%BA%E9%95%BF%E5%BA%A6)
两个函数未经调试
#define MAXLEN 200
int Buff[MAXLEN];
int *Ptr_W = Buff; // 写指针初始化为Buff[0]
int *Ptr_R = NULL; // 读指针初始化为NULL
// 读数据.成功读出时,返回1,x存放读出的结果.不成功返回0,x的内容不可用
int ReadData(int Buff[],int *x) {
if(Ptr_R == NULL || Ptr_R >= Ptr_W) return 0;
*x = *Ptr_R;
Ptr_R += Buff + (Ptr_R - Buff + 1) % MAXLEN;
return 1;
}
// 写数据.成功写入时,返回.不成功返回0
int WriteData(int Buff[],int x) {
if(Ptr_R == NULL) { // 初次写入
Ptr_R = Buff; // 初次写入时,附带完善读指针的初始化操作
*Ptr_W++ = x;
return 1;
}
if(Ptr_W == Ptr_R) return 0; // 缓冲区满
*Ptr_W = x;
Ptr_W += Buff + (Ptr_W - Buff + 1) % MAXLEN;
return 1;
}
#define MAXLEN 200
int Buff[MAXLEN];
int *Ptr_W = Buff; // 写指针初始化为Buff[0]
int *Ptr_R = NULL; // 读指针初始化为NULL
// 读数据.成功读出时,返回1,x存放读出的结果.不成功返回0,x的内容不可用
int ReadData(int Buff[],int *x) {
if(Ptr_R == NULL || Ptr_R >= Ptr_W) return 0;
*x = *Ptr_R;
Ptr_R += Buff + (Ptr_R - Buff + 1) % MAXLEN;
return 1;
}
// 写数据.成功写入时,返回.不成功返回0
int WriteData(int Buff[],int x) {
if(Ptr_R == NULL) { // 初次写入
Ptr_R = Buff; // 初次写入时,附带完善读指针的初始化操作
*Ptr_W++ = x;
return 1;
}
if(Ptr_W == Ptr_R) return 0; // 缓冲区满
*Ptr_W = x;
Ptr_W += Buff + (Ptr_W - Buff + 1) % MAXLEN;
return 1;
}