感:
1. 变量命名问题很大,Buff和buff一起用,不利于阅读。
2. 缓冲区溢出之后,就要将整个缓冲区shift一个字节(O(N)),性能上不利。
3. 缓冲区内已有的字节个数,应该用一个计数器变量进行计数,而不是每次都从头开始数(O(N))。
总的来说:
1. 如果缓冲区的长度不是5而是65536,这份代码将会超慢。
2. 无法接收0x00。
附本人项目用FIFO缓存代码一份(用于缓冲串口收发数据供异步读写)。
<code class="lang-cpp">//------------------------------------------
//fifobuffer
#ifndef sizeofbuffer
#define sizeofbuffer 64
#endif
uchar bufferoperating =0;
typedef struct{
uchar head;
uchar tail;
uchar buf[sizeofbuffer];
}fifobuffer;
void fifobufferinit(fifobuffer *b){
b->head=0;
b->tail=0;
//b->buf=(uchar*)malloc(sizeof(uchar)*bufsize);
}
void fifobufferin(fifobuffer *b,uchar input){
b->buf[b->tail]=input;
b->tail++;
b->tail%=sizeofbuffer;
}
uchar fifobufferout(fifobuffer *b){
uchar output=b->buf[b->head];
b->head++;
b->head%=sizeofbuffer;
return output;
}
uchar fifobufferremain(fifobuffer *b){
if(b->tail < b->head){return b->tail + sizeofbuffer - b->head;}
return b->tail-b->head;
}</code>