aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--strings.c16
-rw-r--r--strings.h3
2 files changed, 17 insertions, 2 deletions
diff --git a/strings.c b/strings.c
index 4164467..94cb6ac 100644
--- a/strings.c
+++ b/strings.c
@@ -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];
+}
diff --git a/strings.h b/strings.h
index 7e772d3..1eb291c 100644
--- a/strings.h
+++ b/strings.h
@@ -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