aboutsummaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorChristina Quast <chrysh.ng+git@gmail.com>2015-04-11 09:31:15 +0200
committerChristina Quast <chrysh.ng+git@gmail.com>2015-04-11 09:31:15 +0200
commit542f9183bbc593bec0cfdf121d087e4e073ca155 (patch)
treec09269b18d1736515b25370e091bf18151a32f7d /firmware
parent87ddfa8c23376a481a79d664df82cea6e51bc583 (diff)
basic ringbuffer implementation
Diffstat (limited to 'firmware')
-rw-r--r--firmware/src_simtrace/ringbuffer.c34
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++;
+ }
+}