diff options
author | Wojtek Kosior <kwojtus@protonmail.com> | 2019-12-31 11:05:33 +0100 |
---|---|---|
committer | Wojtek Kosior <kwojtus@protonmail.com> | 2019-12-31 11:05:33 +0100 |
commit | 8025e6b92a09fcf584c13fea3f04f2a0be9cbe64 (patch) | |
tree | 30437b2b7d19a2b31f52415bc982287335b081b4 | |
parent | 254e035cc27d5787348849b65619a702ae0d42e3 (diff) | |
download | rpi-MMU-example-8025e6b92a09fcf584c13fea3f04f2a0be9cbe64.tar.gz rpi-MMU-example-8025e6b92a09fcf584c13fea3f04f2a0be9cbe64.zip |
add memcpy
-rw-r--r-- | strings.c | 16 | ||||
-rw-r--r-- | strings.h | 3 |
2 files changed, 17 insertions, 2 deletions
@@ -1,5 +1,3 @@ -#include <stddef.h> - #include "strings.h" void uint32_to_dec(uint32_t number, char buf[10]) @@ -79,3 +77,17 @@ size_t strlen(char string[]) return len; } + +void memcpy(void *dst, void *src, size_t nbytes) +{ + size_t iter; + + // copying by word is faster than by byte + // copy by word as much as possible + for (iter = 0; iter < nbytes / 4; iter++) + ((volatile uint32_t*) dst)[iter] = ((uint32_t*) src)[iter]; + + // copy the remaining 1, 2 or 3 bytes by byte + for (iter *= 4; iter < nbytes; iter++) + ((volatile uint8_t*) dst)[iter] = ((uint8_t*) src)[iter]; +} @@ -1,6 +1,7 @@ #ifndef STRINGS_H #define STRINGS_H +#include <stddef.h> #include <stdint.h> void uint32_to_dec(uint32_t number, char buf[10]); @@ -23,4 +24,6 @@ void uint32_to_hexstringt(uint32_t number, char buf[9]); size_t strlen(char string[]); +void memcpy(void *dst, void *src, size_t nbytes); + #endif // STRINGS_H |