diff options
-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 |