感:
1. 变量命名问题很大,Buff和buff一起用,不利于阅读。
2. 缓冲区溢出之后,就要将整个缓冲区shift一个字节(O(N)),性能上不利。
3. 缓冲区内已有的字节个数,应该用一个计数器变量进行计数,而不是每次都从头开始数(O(N))。
总的来说:
1. 如果缓冲区的长度不是5而是65536,这份代码将会超慢。
2. 无法接收0x00。
附本人项目用FIFO缓存代码一份(用于缓冲串口收发数据供异步读写)。
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>
200字以内,仅用于支线交流,主线讨论请采用回复功能。