diff options
author | Christian Cunningham <cc@localhost> | 2022-01-20 18:50:41 -0700 |
---|---|---|
committer | Christian Cunningham <cc@localhost> | 2022-01-20 18:50:41 -0700 |
commit | 4bb5f36b8c696361d5a283680ea7dadde4e364df (patch) | |
tree | 9a5c3f6766945227e3d7d714559d15b7b3fc1e32 | |
parent | 9ca0f8a8bdbfe543a23ff2e75502744a7263a5b7 (diff) |
Added rotating buffers
-rw-r--r-- | include/lib/mem.h | 7 | ||||
-rw-r--r-- | src/lib/mem.c | 13 |
2 files changed, 20 insertions, 0 deletions
diff --git a/include/lib/mem.h b/include/lib/mem.h index eff6445..04056f7 100644 --- a/include/lib/mem.h +++ b/include/lib/mem.h @@ -12,9 +12,16 @@ struct MemTab { void* data; } __attribute__((packed)); +struct RotBuffer { + void* base; + unsigned int size; + unsigned int offset; +}; + void memset(unsigned char* dest, unsigned char value, unsigned int n); void memcpy(unsigned char* src, unsigned char* dest, unsigned int n); unsigned char memcmp(unsigned char* a, unsigned char* b, unsigned int n); +void memcpyrot(unsigned char* src, struct RotBuffer* rb, unsigned int n); void memshow32(unsigned long* addr, unsigned int n); void memset32(unsigned long* dest, unsigned long value, unsigned int n); diff --git a/src/lib/mem.c b/src/lib/mem.c index 91fed94..dc915e6 100644 --- a/src/lib/mem.c +++ b/src/lib/mem.c @@ -1,6 +1,19 @@ #include <drivers/uart.h> #include <lib/mem.h> +void memcpyrot(unsigned char* src, struct RotBuffer* rb, unsigned int n) +{ + if (n > rb->size) + return; + unsigned char* addr = rb->base + rb->offset; + for (unsigned int i = 0; i < n; i++) { + if (addr >= (unsigned char*)(rb->base + rb->size)) + addr = rb->base; + *addr = src[i]; + addr++; + } +} + void memshow32(unsigned long* addr, unsigned int n) { for(unsigned int i = 0; i < n; i++) { |