news 2026/6/9 1:13:43

【环形缓冲区】1-概念与编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【环形缓冲区】1-概念与编程

【环形缓冲区】1-概念与编程

文章目录

  • 【环形缓冲区】1-概念与编程
    • 一、环形缓冲区的引入
    • 二、环形缓冲区 编程

这一点很重要,后续还会做补充

一、环形缓冲区的引入

//下面是一个按键控制LCD的程序main(){while(1){key=read_key();// 读取按键值LCD(key);// 耗时 30min}}
  • 想要在这 30min 中,不丢失按键,就需要引入中断;
// 中断回调函数key_ISR(){g_key=记录key值;// 为防新值覆盖旧值,需要用buf ==> 环形buf}
  • 因此引入环形缓冲区,一方写buffer、另一方读buffer
环形缓冲区示例

二、环形缓冲区 编程

//circle_buffer.h#ifndef_CIRCLE_BUF_H#define_CIRCLE_BUF_H#include<stdint.h>typedefstructcircle_buf{uint32_tr;uint32_tw;uint32_tlen;uint8_t*buf;}circle_buf,*p_circle_buf;voidcircle_buf_init(p_circle_buf pCircleBuf,uint32_tlen,uint8_t*buf);intcircle_buf_read(p_circle_buf pCircleBuf,uint8_t*pVal);intcircle_buf_write(p_circle_buf pCircleBuf,uint8_tval);#endif/* _CIRCLE_BUF_H */
//circle_buffer.c#include<stdint.h>#include"circle_buffer.h"voidcircle_buf_init(p_circle_buf pCircleBuf,uint32_tlen,uint8_t*buf){pCircleBuf->r=pCircleBuf->w=0;pCircleBuf->len=len;pCircleBuf->buf=buf;}intcircle_buf_read(p_circle_buf pCircleBuf,uint8_t*pVal){if(pCircleBuf->r!=pCircleBuf->w){*pVal=pCircleBuf->buf[pCircleBuf->r];pCircleBuf->r++;if(pCircleBuf->r==pCircleBuf->len)pCircleBuf->r=0;return0;}else{return-1;}}intcircle_buf_write(p_circle_buf pCircleBuf,uint8_tval){uint32_tnext_w;next_w=pCircleBuf->w+1;if(next_w==pCircleBuf->len)next_w=0;if(next_w!=pCircleBuf->r){pCircleBuf->buf[pCircleBuf->w]=val;pCircleBuf->w=next_w;return0;}else{return-1;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 1:11:58

UABEA:终极Unity游戏资源编辑完全指南

UABEA&#xff1a;终极Unity游戏资源编辑完全指南 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 你是否曾经想过深入探索Unity游戏内部&#xff0c;查看那些精美的纹理、音效和模型是如何工作的&…

作者头像 李华
网站建设 2026/6/9 1:09:02

C语言中的递归

C语言中的递归 递归是一种编程技巧,它允许函数直接或间接地调用自身。在C语言中,递归是一种强大的编程工具,它可以帮助我们解决许多问题,特别是那些可以分解为相似子问题的算法。本文将详细介绍C语言中的递归,包括递归的基本概念、递归函数的编写、递归的优缺点以及递归在…

作者头像 李华
网站建设 2026/6/9 1:08:02

Claude Code-Dynamic Workflows:1.为什么用工作流?

Claude Code-Dynamic Workflows&#xff1a;1.为什么用工作流&#xff1f; 为什么用工作流如果你经常让 Claude 做长任务&#xff0c;应该见过这种情况&#xff1a;它一开始很认真&#xff0c;越往后越像在“凭感觉收尾”。不是模型突然变差了&#xff0c;而是我们把太多事情塞…

作者头像 李华
网站建设 2026/6/9 1:00:01

SQLite数据操作避坑指南:从‘insert失败’到‘select显示乱’的常见问题排查(附字段名修改方法)

SQLite数据操作避坑指南&#xff1a;从‘insert失败’到‘select显示乱’的常见问题排查当你第一次尝试在SQLite中插入或查询数据时&#xff0c;可能会遇到各种意料之外的问题。这些问题看似简单&#xff0c;却足以让新手开发者陷入长时间的调试困境。本文将带你深入剖析SQLite…

作者头像 李华
网站建设 2026/6/9 0:56:02

小程序毕业设计-基于微信小程序的扶贫助农系统及其小程序的实现基于springboot+微信小程序的扶贫助农系统及其小程序的实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/9 0:40:31

如何快速部署网易云音乐插件管理器:5个专业优化策略指南

如何快速部署网易云音乐插件管理器&#xff1a;5个专业优化策略指南 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM Installer是一款基于Rust语言开发的网易云音乐插件管理器…

作者头像 李华