diff options
Diffstat (limited to 'firmware/src_simtrace')
-rw-r--r-- | firmware/src_simtrace/ringbuffer.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/firmware/src_simtrace/ringbuffer.c b/firmware/src_simtrace/ringbuffer.c new file mode 100644 index 0000000..85e3916 --- /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++; + } +} |