Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
ringbuffer.h
См. документацию.
1 
29 #ifndef __RING_BUFFER_H_
30 #define __RING_BUFFER_H_
31 
32 #include <string.h>
33 #include "types.h"
34 
35 
39 typedef struct
40 {
41  void *data;
42  int count;
43  int itemSz;
44  uint32_t head;
45  uint32_t tail;
46 }RINGBUFF_T;
47 
51 #define RB_INDH(gl_rb_t) ((gl_rb_t)->head & ((gl_rb_t)->count - 1))
52 #define RB_INDT(gl_rb_t) ((gl_rb_t)->tail & ((gl_rb_t)->count - 1))
53 #define RB_VHEAD(gl_rb_t) (*(volatile uint32_t *) &(gl_rb_t)->head)
54 #define RB_VTAIL(gl_rb_t) (*(volatile uint32_t *) &(gl_rb_t)->tail)
55 #define RB_FLUSH(gl_rb_t) (((RINGBUFF_T *)gl_rb_t)->head = ((RINGBUFF_T *)gl_rb_t)->tail=0)
65 void RingBuffer_Init(RINGBUFF_T *RingBuff, void *buffer, int itemSize, int count);
66 
73 Status RingBuffer_Insert(RINGBUFF_T *RingBuff, const void *data);
74 
82 int RingBuffer_InsertMult(RINGBUFF_T *RingBuff, const void *data, int num);
83 
90 Status RingBuffer_Pop(RINGBUFF_T *RingBuff, void *data);
91 
99 int RingBuffer_PopMult(RINGBUFF_T *RingBuff, void *data, int num);
100 
106  int RingBuffer_GetSize(RINGBUFF_T *RingBuff);
107 
113  int RingBuffer_GetCount(RINGBUFF_T *RingBuff);
114 
120  int RingBuffer_GetFree(RINGBUFF_T *RingBuff);
121 
127  int RingBuffer_IsFull(RINGBUFF_T *RingBuff);
128 
134  int RingBuffer_IsEmpty(RINGBUFF_T *RingBuff);
135 
136 
137 #endif /* __RING_BUFFER_H_ */
int itemSz
Definition: ringbuffer.h:43
int RingBuffer_GetFree(RINGBUFF_T *RingBuff)
Получение размера свободного места в кольцевом буфере
Definition: ringbuffer.c:204
Этот файл содержит структуры, макросы и функции необходимые для работы с дополнительными типами...
int RingBuffer_IsEmpty(RINGBUFF_T *RingBuff)
Проверка кольцевого буфера на отсутствие данных
Definition: ringbuffer.c:224
uint32_t tail
Definition: ringbuffer.h:45
int RingBuffer_GetCount(RINGBUFF_T *RingBuff)
Получения количества элементов, записанных в кольцевой буфер.
Definition: ringbuffer.c:194
Status RingBuffer_Insert(RINGBUFF_T *RingBuff, const void *data)
Запись одного элемента в кольцевой буфер.
Definition: ringbuffer.c:55
int RingBuffer_IsFull(RINGBUFF_T *RingBuff)
Проверка на наличие свободного места в кольцевом буфере
Definition: ringbuffer.c:214
int RingBuffer_InsertMult(RINGBUFF_T *RingBuff, const void *data, int num)
Запись нескольких элементов в кольцевой буфер.
Definition: ringbuffer.c:77
Структура кольцевого буфера
Definition: ringbuffer.h:39
uint32_t head
Definition: ringbuffer.h:44
void * data
Definition: ringbuffer.h:41
Status RingBuffer_Pop(RINGBUFF_T *RingBuff, void *data)
Чтение одного элемента из кольцевого буфера
Definition: ringbuffer.c:120
int RingBuffer_PopMult(RINGBUFF_T *RingBuff, void *data, int num)
Чтение массива элементов из кольцевого буфера
Definition: ringbuffer.c:142
int RingBuffer_GetSize(RINGBUFF_T *RingBuff)
Получение размера кольцевого буфера в байтах.
Definition: ringbuffer.c:184
Status
Тип для статуса операции
Definition: types.h:76