/*
* Copyright (C) 2018 edgar1470@gmail.com
*
*/
#include "xm_ringbuffer.h"
#define CACHE_BUFFER_SIZE (1024)
int8_t cache[RING_BUFFER_SIZE][1024] = {{0}};
/*
* return ther initial state of the ring buffer
* @param buffer The buffer to be initialized.
* @param size The buffer size which should be power of two.
* @return -1 if buffer is null; 0 success.
*/
int32_t xm_ringbuffer_init(xm_ringbuffer_t *buffer, uint32_t size)
{
int32_t r = -1;
if (buffer) {
buffer->head = 0;
buffer->tail = 0;
buffer->size = size; /* TODO: force size */
buffer->data = malloc(size);
if (buffer->data) {
r = 0;
}
}
return r;
}
/*
* Returns whether the ring buffer is full.
* @param buffer The buffer for which it should be returned whether it is full.
* @return 1 if full; 0 otherwise.
*/
int32_t xm_ringbuffer_is_full(xm_ringbuffer_t *buffer) {
return (((buffer->head + 1) % buffer->size) == buffer->tail);
}
/*
* Returns whether the ring buffer is empty.
* @param buffer The buffer for which it should be returned whether it is empty.
* @return 1 if empty; 0 otherwise.
*/
int32_t xm_ringbuffer_is_empty(xm_ringbuffer_t *buffer) {
return (buffer->head == buffer->tail);
}
int32_t xm_ringbuffer_write(xm_ringbuffer_t *buffer, uint32_t data)
{
int32_t r = -1;
if (buffer) {
if (xm_ringbuffer_is_full(buffer)) {
/* ring buffer is full just overwirte the oldest one */
buffer->tail = (buffer->tail + 1) % buffer->size;
}
buffer->data[buffer->head] = data;
buffer->head = (buffer->head + 1) % buffer->size;
r = 0;
}
return r;
}
int32_t xm_ringbuffer_read(xm_ringbuffer_t *buffer, uint32_t *data)
{
int32_t r = -1;
if (xm_ringbuffer_is_empty(buffer)) {
return r;
}
*data = buffer->data[buffer->tail];
buffer->tail = (buffer->tail + 1) % buffer->size;
r = 0;
return r;
}
没有合适的资源?快使用搜索试试~ 我知道了~
xm-ring-buffer.tar.gz_RINGBUFFER_XMRING_buffer_circlebuffer_wayr
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2022-09-15
00:55:45
上传
评论
收藏 10KB GZ 举报
温馨提示
共2个文件
c:1个
h:1个
一种轻量级的循环缓冲设计实现,可用于数据缓冲
资源推荐
资源详情
资源评论
收起资源包目录
xm-ring-buffer.tar.gz (2个子文件)
xm-ring-buffer
xm_ringbuffer.c 2KB
xm_ringbuffer.h 941B
共 2 条
- 1
资源评论
小波思基
- 粉丝: 70
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功