From 542f9183bbc593bec0cfdf121d087e4e073ca155 Mon Sep 17 00:00:00 2001 From: Christina Quast Date: Sat, 11 Apr 2015 09:31:15 +0200 Subject: [PATCH] basic ringbuffer implementation --- firmware/src_simtrace/ringbuffer.c | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 firmware/src_simtrace/ringbuffer.c diff --git a/firmware/src_simtrace/ringbuffer.c b/firmware/src_simtrace/ringbuffer.c new file mode 100644 index 00000000..85e39169 --- /dev/null +++ b/firmware/src_simtrace/ringbuffer.c @@ -0,0 +1,34 @@ +typedef struct ringbuf { + uint8_t buf[BUFLEN]; + uint8_t *buf_end; + uint8_t *reader; + uint8_t *writer; +} ringbuf; + +void rbuf_init(ringbuf *rb) +{ + rb->buf_end = buf[BUFLEN-1]; + rb->buf = {0}; + rb->reader = rb->buf[0]; + rb->writer = rb->buf[0]; +} + +uint8_t rbuf_read(ringbuf *rb) +{ + uint8_t val = *(rb->reader); + if (rb->reader == rb->buf_end) { + rb->reader = rb->buf; + } else{ + rb->reader++; + } + return val; +} + +void rbuf_write(ringbuf *rb, uint8_t item) { + *(rb->writer) = item; + if (rb->writer == rb->buf_end) { + rb->writer = rb->buf; + } else{ + rb->writer++; + } +}