说明:循环缓冲区
#ifndef _LOOPBUF_H_
#define _LOOPBUF_H_
#define u32 unsigned int
#define u8 unsigned char
#define u16 unsigned short
typedef struct LoopBuf_t
{
u32 flag;
u32 head;
u32 tail;
u16 len;
u8 buf[30];
} LoopBuf;
#define GET_LOOPBUF_WLEN(LOOPBUF,MAXLEN) ((((LOOPBUF)->head)+(u16)(MAXLEN)-(((LOOPBUF)->tail)+1))%(u16)(MAXLEN))
#define GET_LOOPBUF_RLEN(LOOPBUF,MAXLEN) (((u16)(MAXLEN)-1)- (GET_LOOPBUF_WLEN(LOOPBUF,MAXLEN)))
#define LOOPBUF_READ(LOOPBUF,MAXLEN,data,size) \
do { \
int i;\
for (i=0;i<size;i++) \
{\
data[i]=((LOOPBUF)->buf)[((LOOPBUF)->head)];\
((LOOPBUF)->head)=(++((LOOPBUF)->head))%(u16)(MAXLEN);\
}\
}while(0)
#define LOOPBUF_WRITE_BYTE(LOOPBUF,MAXLEN,chr)\
do {\
((LOOPBUF)->buf)[((LOOPBUF)->tail)]=(chr);\
((LOOPBUF)->tail)=(++((LOOPBUF)->tail))%(u16)(MAXLEN);\
}while(0)
#define LOOPBUF_WRITE(LOOPBUF,MAXLEN,data,size)\
do {\
int i;\
for (i=0;i<size;i++)\
{\
LOOPBUF_WRITE_BYTE(LOOPBUF,MAXLEN,((data)[i]));\
}\
}while(0)
#endif