#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相关推荐

  1. Git的基本使用(用户初始化配置、新建代码库、把文件提交到缓存区、把文件提交到本地仓库等)

    [基本概念] Git: Git是负责对工作区的文件进行版本控制,因为Git装在本地,那么在本地(当前计算机下)就必须要有一个仓库,这个仓库中记录了所有的版本变化. Github: 公网上典型的远程仓库 ...

  2. 插件分享 | 简单免杀绕过和利用上线的 GoCS

    前言: Goby 可以快速准确的扫描资产,并直观呈现出来.同时经过上次 EXP 计划过后,PoC&EXP 也增加了许多.在实战化漏洞扫描后,对于高危漏洞的利用,不仅仅只在 whoami 上,而 ...

  3. Linux系统编程:验证kernel内核缓存区大小->4096字节

    Linux系统编程:验证kernel内核缓存区大小->4096字节 李四老师 于 2018-04-04 00:40:04 发布 2778 收藏 2 分类专栏: [Linux编程] [C/C++编 ...

  4. KerberosSDR代码笔记(4) 接收机程序(滤波器、直流抑制、循环缓存)

    接收机程序分为2部分,一部分在hydra_receiver.py中,另一部分在_receiver/C文件夹下,由几个c语言写的程序构成. 第二篇笔记中讲过: _receiver文件夹下还有个C文件夹, ...

  5. 一级缓存、二级缓存、三级缓存区别是什么 详解它们的区分方法

    大家都知道CPU缓存很重要,但对于缓存的具体细分却知之甚少,本文只要是关于CPU缓存的介绍,并着重描述了一级缓存.二级缓存.三级缓存区别方法. CPU缓存 CPU缓存(Cache Memory)是位于 ...

  6. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...

    JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...

  7. linux socket 清空缓存区

    情况一:知晓缓存区中数据的大小 这种情况应该就不用多说了,直接循环的把数据都读取出来就行了. 情况二:不知道缓存区中数据的大小 方案一 close一次socket,这个方案有效是有效,但这样的小问题还 ...

  8. 简单免杀绕过和利用上线的 GoCS

    前言: Goby 可以快速准确的扫描资产,并直观呈现出来.同时经过上次 EXP 计划过后,PoC&EXP 也增加了许多.在实战化漏洞扫描后,对于高危漏洞的利用,不仅仅只在 whoami 上,而 ...

  9. SAP MDG —— 简介MDG数据处理逻辑和MDF缓存区

    文章目录 MDG数据处理 简介MDG数据处理逻辑 读取Entity Data 修改Entity Data 派生 Derivations 实战:运用技术知识解决实际问题 用户问题 问题分析 展示层 BO ...

最新文章

  1. Android开发艺术探索》读书笔记 (8) 第8章 理解Window和WindowManager
  2. plsql 使用技巧 及 语句集锦(二)经典update
  3. mysql用大白话解释_Java基础--2021Java面试题系列教程--大白话解读
  4. python中如何将字典直接变成二维数组_python基础知识(列表、字典、二维数组)...
  5. 作者:熊贇(1980-),女,博士,复旦大学计算机科学技术学院教授
  6. 在 CTreeCtrl 中枚举系统中的所有窗口!(II)
  7. Linux 性能监测
  8. OpenSCAD设计的3D打印智能路由器盒子(V1.1)
  9. mysql分布式写入_分布式系统知识点七:mysql读写分离简介(转载)
  10. linux sftp 增加用户(centos)
  11. Atitit ocr的艺术 艾提拉著 目录 1. OCR可以说是一门非常“古老”的技术,在上世纪50年代到90年代, 1 1.1. 场景文字识别技术(Scene Text Recognition,
  12. 禅道备份功能_禅道备份处理
  13. 带你啃透深度学习必学“圣经”花书!(附带论文代码精读讲解)
  14. 硅谷钢铁侠的的传奇人生
  15. LM小型可编程控制器软件(基于CoDeSys)笔记二十七:温度电阻通道和DO通道
  16. 张明楷的100个刑法案例
  17. javaWeb文档预览之office转pdf(附详细代码)
  18. Android网络框架-Volley实践 使用Volley打造自定义ListView
  19. 【java】java如何保留时分秒存取mySql中的datetime类型数据的方法 及 显示时间与数据库存放时间相差n小时的解决方法
  20. 集中式、分布式版本控制系统的区别

热门文章

  1. 大型网络之---公司内部局域网
  2. LINQ to SQL 用O/R设计器手工建表对象
  3. 配置了tomcat,更改了默认端口为8070,还是访问不了
  4. Android apk反编译工具介绍
  5. System.out和System.err的区别
  6. 一次数据分析的全过程
  7. tp框架使用心得(六)——分页查询
  8. base64是啥原理
  9. oracle-审计3
  10. C++ 常量类型 const 详解