失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 串口循环缓存区 简单 免初始化 不用堆 指针 分段memcpy

串口循环缓存区 简单 免初始化 不用堆 指针 分段memcpy

时间:2020-12-23 04:38:18

相关推荐

串口循环缓存区 简单 免初始化    不用堆 指针 分段memcpy

#include <stdio.h>#include <stdlib.h>#define RINGBUF_LEN 32typedef struct ringbuf_t{int head;//头指针int tail;//尾指针int len;//长度char buf[RINGBUF_LEN];//缓冲大小}ringbuf_t;ringbuf_t t_buf_ring;//缓冲区初始化void init_ringbuf(void){memset(&t_buf_ring, 0, sizeof(t_buf_ring));}//入队int ringbuf_write(char data){if(RINGBUF_LEN <= t_buf_ring.len) {return -1;}t_buf_ring.buf[t_buf_ring.tail] = data;t_buf_ring.tail = (t_buf_ring.tail + 1) % RINGBUF_LEN;t_buf_ring.len++;return 0;}//出队int ringbuf_read(char *date){if(0 >= t_buf_ring.len) {return -1;}*date = t_buf_ring.buf[t_buf_ring.head];t_buf_ring.head = (t_buf_ring.head + 1) % RINGBUF_LEN;t_buf_ring.len--;return 0;}//出队int ringbuf_show(){int i,j;for (i = 0, j = t_buf_ring.head; i < t_buf_ring.len; i++, j++) {printf("%d --- %c ", i, t_buf_ring.buf[j]);}printf("\n");return 0;}// 主函数int main(){char c, c_r;int i, cnt;//setvbuf(stdout,NULL,_IONBF,0); //pinrtf、putchar不能立马输出,打开此注释//init_ringbuf();printf("Please enter a line [blank line to terminate]> ");do{c=getchar();putchar(c);switch(c){case 'Q':goto exit;break;case 'R':printf("----------read----------------\n");printf("len - %d \n", t_buf_ring.len);cnt = t_buf_ring.len;for (i = 0; i < cnt; i++) {ringbuf_read(&c_r);printf("%d ---- %c ", i, c_r);}//ringbuf_show();break;default :printf("----------write-----\n");if(c!='\n') ringbuf_write(c);printf("%d len\n", t_buf_ring.len);ringbuf_show();break;}}while (1);exit:printf("exit.\n");return 0;}

如果觉得《串口循环缓存区 简单 免初始化 不用堆 指针 分段memcpy》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。