source: S-port/trunk/Core/Inc/RingBuffer.h

Last change on this file was 1, checked in by AlexLir, 3 years ago
File size: 1.3 KB
RevLine 
[1]1/*
2 * RingBuffer.h
3 *
4 * Created: 11.05.2021 11:14:37
5 * Author: Admin
6 */
7#ifndef RINGBUFFER_H_
8#define RINGBUFFER_H_
9
10#include <stdint.h>
11
12typedef struct {
13 const uint16_t BUF_SZ;
14 uint16_t tail; // "óêàçàòåëü" õâîñòà áóôåðà
15 uint16_t head; // "óêàçàòåëü" ãîëîâû áóôåðà
16 volatile uint16_t count; // ñ÷åò÷èê ñèìâîëîâ
17 uint16_t *data;
18} RingBuf16bit_ptr_typeDef;
19
20typedef struct {
21 const uint16_t BUF_SZ;
22 uint16_t tail; // "óêàçàòåëü" õâîñòà áóôåðà
23 uint16_t head; // "óêàçàòåëü" ãîëîâû áóôåðà
24 volatile uint16_t count; // ñ÷åò÷èê ñèìâîëîâ
25 uint8_t *data;
26} RingBuf8bit_ptr_typeDef;
27
28#define dRBuf_Count(us) ((us)->count)
29#define dRBuf_Full(us) (((((us)->head+1)&((us)->BUF_SZ-1)) == (us)->tail) && ((us)->count != 0))
30#define dRBuf_Empty(us) (((us)->count) == (0))
31#define dRBuf_Put(us, buf, sym) {buf[((us)->head)]=sym; (us)->head = (((us)->head + 1) & ((us)->BUF_SZ - 1)); (us)->count++;}
32#define dRBuf_PutF(us, buf, sym) {if (!(dRBuf_Full(us))) dRBuf_Put(us, buf, sym);}
33
34#define dRBuf_Get(us, buf, sym) {sym = buf[((us)->tail)]; (us)->tail = (((us)->tail + 1) & ( (us)->BUF_SZ - 1)); (us)->count--;}
35#define dRBuf_GetE(us, buf, sym) {if (!(dRBuf_Empty(us))) dRBuf_Get(us, buf, sym);}
36
37#endif /* RINGBUFFER_H_ */
Note: See TracBrowser for help on using the repository browser.