分类: C/C++
2009-08-03 15:50:12
(1) 定义循环缓存:
#define MAX_BUFF_LEN 1024 // 定义缓存大小
typedef struct // 定义数据结构
{
uint data;
}DATA_BUFF_T;
typedef struct // 定义缓存结构
{
uint readPos;
uint writePos;
DATA_BUFF_T DATA[MAX_BUFF_LEN];
}DATAS_BUFF_T;
static DATAS_BUFF_T Buff0; // 定义缓存
(2)初始化循环缓存:
Buff0.readPos = 0;
Buff0.writePos = 0;
(3)判断缓存中是否有数据:
BOOL HaveData_Buff(void)
{
if (Buff0.readPos != Buff0.write.Pos)
{
return 1;
}
else
{
return 0;
}
}
(4)向缓存中写数据:
int WriteData(uint data)
{
uint nextPos;
nextPos = (Buff0.writePos + 1) % MAX_BUFF_LEN;
if (nectPos != Buff0.readPos) // 判断缓存是否满,需要写入数据的位置等于读数据的位置时
{
Buff0.DATA[writePos].data = data;
Buff0.writePos = nextPos;
return 0; //成功
}
else
{
return -1;
}
}
(5)从缓存中读数据:
uint ReadData(void)
{
uint dataTemp;
if (HaveData_Buff() == 0)
{
printf("buffer is empty\n");
return -1;
}
dataTemp = Buff0.DATA[readPos].data;
Buff0.readPos = (Buff0.readPos + 1) % MAX_BUFF_LEN;
return dataTemp;
}
这是我学习工作过程中的记录和整理,如有错误和不托之处还请大师留言指点,学生在此先行谢过了!!!
chinaunix网友2011-03-28 13:50:45
readPos和writePos的含义是啥?write操作会先writePos++,但read时是直接readPos,如果先write data,then read,岂不是read出来的是未初始化的数据?(在第一次write的时候,比如readPos=writePos=0, write, writePos=1, read Buff0[0].data??)