首页 > 其他分享 >C实现一个环回缓冲区,ring buffer

C实现一个环回缓冲区,ring buffer

时间:2024-03-08 14:22:05浏览次数:13  
标签:buffer char 环回 int ring size out

#include <stdio.h>
#include <stdlib.h>

#define  BUF_CNT  64
char buf[BUF_CNT]={0};

typedef struct 
{
	char *buffer;
	int in;
	int out;
	int cnt;
	int size;
}RING_BUFFER_Typedef;

void ring_buffer_init(RING_BUFFER_Typedef *ring, char *buffer, int len)
{
	ring->buffer = buffer;
	ring->in = 0;
	ring->out = 0;
	ring->cnt = 0;
	ring->size=len;
}

void ring_buffer_in(RING_BUFFER_Typedef *ring, char c)
{
	if(ring->cnt>=ring->size)
	{
		ring->out++;
		if(ring->out==ring->size) ring->out=0;
	}
	else
	{
		ring->cnt++;
	}
	if(ring->in>=ring->size) ring->in=0;
	ring->buffer[ring->in] = c;
	ring->in++;
}

int ring_buffer_out(RING_BUFFER_Typedef *ring, char *c)
{
	if(ring->cnt>0)
	{
		if(ring->out>=ring->size) ring->out=0;
		*c = ring->buffer[ring->out];
		ring->out++;
		ring->cnt--;
		return 0;
	}
	return -1;
}

int main()
{
	RING_BUFFER_Typedef ring;
	char i = 0;
	char c;
    ring_buffer_init(&ring, buf, BUF_CNT);
	while(1)
	{
		for(i=0;i<125;i++)
			ring_buffer_in(&ring, i);
		for(i=0;i<BUF_CNT;i++)
		{
			if(ring_buffer_out(&ring, &c)==0)
			{
				printf("%02x\r\n", c);
			}
		}
		break;
	}
}

标签:buffer,char,环回,int,ring,size,out
From: https://www.cnblogs.com/zengfeng1013/p/18060873

相关文章

  • SpringMVC实现文件上传&下载(2)
    文件上传步骤第一步:由于SpringMVC使用的是commons-fileupload实现,故将其组件引入项目中,这里用到的是commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。第二步:spring-mvx中配置MultipartResolver处理器。可在此加入对上传文件的属性限制。第三步:在Controller的方法中添加M......
  • Spring-Framework6.1.x源码阅读环境搭建
    Spring-FrameWork6.1.x源码阅读环境搭建1.代码获取https://github.com/spring-projects/spring-framework.git。2.进入目录,修改目录下gradle/wrapper/gradle-wrapper.properties,看一下这里指定的gradle版本,distributionUrl=https://services.gradle.org/distributions/gradle-......
  • 【Spring RESTful】RESTful开发风格的一些细节
    传统基于MVC模式的Web应用的问题JSP返回HTML不能被app/小程序解析REST&&RESTfulRESTful传输数据客户端发送的所有请求都是url,url是用户交互入口服务端只返回JSON/XML格式数据,不包含任何的渲染内容不同的客户端接受数据之后,以自己的形式对数据进行渲染与展现RESTfu......
  • spring - mvc - @Async
    @Async@EnableAsync1.启用异步支持@EnableAsync注释在我们的应用程序中启用异步处理。具有类似功能的XML等效项是使用executor属性的task:*命名空间。让我们首先通过Java配置启用异步处理。我们将通过将@EnableAsync添加到配置类来完成此操作:@Configuration@EnableAsync......
  • 当未指定且存在多个构造器,实例化对象时Spring如何选择?
    前言在前面的讲解中,我们了解了如何获取构造器。当只有一个符合条件的构造器时,自然会选择它作为初始化的构造器。然而,在上一节中,我们遇到了一种特殊情况:当有多个符合条件的构造器时,返回的是一个数组。在这种情况下,Spring又是如何从多个构造器中选择最合适的呢?今天,我们将讨论的主题......
  • spring - mvc - @Scheduled
    @Scheduled1.启用调度支持为了在Spring中启用对调度任务和@Scheduled注释的支持,我们可以使用Java启用样式注释:@Configuration@EnableSchedulingpublicclassSpringConfig{...}相反,我们可以在XML中做同样的事情:<task:annotation-driven>2.按固定延迟安排任务......
  • spring - springmvc - @EnableCaching
    @EnableCaching@EnableCaching注释在应用程序中启用注释驱动的缓存管理功能,并允许我们在应用程序中使用@Cacheable和@CacheEvict注释。具有类似功能的XML等效项是cache:*命名空间:@Configuration@EnableCachingpublicclassCacheConfig{@BeanpublicCacheMana......
  • SpringBoot 支付宝付款接口类、支付异步回调函数模板
    1.付款接口类1.1.引入Maven依赖<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.38.221.ALL</version></dependency>1.2.将下面代码保存为AlipayTemplate.java@Config......
  • SpringBoot-重要注解(1)
    ConfigurationProperties注解https://blog.csdn.net/skh2015java/article/details/120141409@Import、@ImportAutoConfigurationhttps://www.cnblogs.com/imyjy/p/16092825.html当我们需要在一个配置类中导入另一个Configuration配置类时,可以使用@Import、@ImportAuto......
  • Spring框架Bean对象的五个作用域
    ​ 一、前言:Bean对象简介在Spring项目中,那些由Spring IoC容器所管理的对象,称为bean。简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。上一段描述......