diff options
author | Christina Quast <chrysh.ng+git@gmail.com> | 2015-04-11 09:31:15 +0200 |
---|---|---|
committer | Christina Quast <chrysh.ng+git@gmail.com> | 2015-04-11 09:31:15 +0200 |
commit | 542f9183bbc593bec0cfdf121d087e4e073ca155 (patch) | |
tree | c09269b18d1736515b25370e091bf18151a32f7d /firmware | |
parent | 87ddfa8c23376a481a79d664df82cea6e51bc583 (diff) |
basic ringbuffer implementation
Diffstat (limited to 'firmware')
-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++; + } +} |