From 6bc99b1d1f593703360e29165f218faf61daf109 Mon Sep 17 00:00:00 2001 From: Neo Xu Date: Wed, 29 Nov 2023 18:15:27 +0800 Subject: [PATCH] feat(stdlib): add lv_memmove (#4888) Signed-off-by: Xu Xingliang --- src/libs/lz4/lz4.h | 5 +---- src/stdlib/builtin/lv_mem_core_builtin.c | 2 +- src/stdlib/builtin/lv_sprintf_builtin.c | 2 +- src/stdlib/builtin/lv_string_builtin.c | 18 +++++++++++++++++- src/stdlib/builtin/lv_tlsf.c | 2 +- src/stdlib/builtin/lv_tlsf.h | 2 +- src/stdlib/clib/lv_mem_core_clib.c | 2 +- src/stdlib/clib/lv_string_clib.c | 12 +++++++----- src/stdlib/lv_string.h | 9 +++++++++ .../micropython/lv_mem_core_micropython.c | 2 +- src/stdlib/rtthread/lv_mem_core_rtthread.c | 2 +- src/stdlib/rtthread/lv_sprintf_rtthread.c | 2 +- src/stdlib/rtthread/lv_string_rtthread.c | 12 +++++++----- 13 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/libs/lz4/lz4.h b/src/libs/lz4/lz4.h index 3af8297d4..72080233e 100644 --- a/src/libs/lz4/lz4.h +++ b/src/libs/lz4/lz4.h @@ -46,10 +46,7 @@ extern "C" { #define LZ4_FREESTANDING 1 #define LZ4_memset lv_memset #define LZ4_memcpy lv_memcpy -#define LZ4_memmove memmove -/** - * @todo add LZ4_memmove - */ +#define LZ4_memmove lv_memmove #ifndef LZ4_H_2983827168210 #define LZ4_H_2983827168210 diff --git a/src/stdlib/builtin/lv_mem_core_builtin.c b/src/stdlib/builtin/lv_mem_core_builtin.c index 0763ab3d8..4d42f8929 100644 --- a/src/stdlib/builtin/lv_mem_core_builtin.c +++ b/src/stdlib/builtin/lv_mem_core_builtin.c @@ -260,4 +260,4 @@ static void lv_mem_walker(void * ptr, size_t size, int used, void * user) mon_p->free_biggest_size = size; } } -#endif /*LV_USE_BUILTIN_MALLOC*/ +#endif /*LV_STDLIB_BUILTIN*/ diff --git a/src/stdlib/builtin/lv_sprintf_builtin.c b/src/stdlib/builtin/lv_sprintf_builtin.c index 97b99ee3f..d5fc55537 100644 --- a/src/stdlib/builtin/lv_sprintf_builtin.c +++ b/src/stdlib/builtin/lv_sprintf_builtin.c @@ -883,4 +883,4 @@ int lv_vsnprintf(char * buffer, size_t count, const char * format, va_list va) return _lv_vsnprintf(_out_buffer, buffer, count, format, va); } -#endif /*LV_USE_BUILTIN_SNPRINTF*/ +#endif /*LV_STDLIB_BUILTIN*/ diff --git a/src/stdlib/builtin/lv_string_builtin.c b/src/stdlib/builtin/lv_string_builtin.c index aa20626b5..0e27ab2ae 100644 --- a/src/stdlib/builtin/lv_string_builtin.c +++ b/src/stdlib/builtin/lv_string_builtin.c @@ -145,6 +145,22 @@ LV_ATTRIBUTE_FAST_MEM void lv_memset(void * dst, uint8_t v, size_t len) } } +LV_ATTRIBUTE_FAST_MEM void * lv_memmove(void * dst, const void * src, size_t len) +{ + if(dst < src || (char *)dst > ((char *)src + len)) { + return lv_memcpy(dst, src, len); + } + else { + char * tmp = (char *)dst + len; + char * s = (char *) src + len; + + while(len--) { + *--tmp = *--s; + } + return dst; + } +} + /* See https://en.cppreference.com/w/c/string/byte/strlen for reference */ size_t lv_strlen(const char * str) { @@ -194,4 +210,4 @@ char * lv_strdup(const char * src) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_BUILTIN_MEMCPY*/ +#endif /*LV_STDLIB_BUILTIN*/ diff --git a/src/stdlib/builtin/lv_tlsf.c b/src/stdlib/builtin/lv_tlsf.c index b582c3d9b..8910b05ef 100644 --- a/src/stdlib/builtin/lv_tlsf.c +++ b/src/stdlib/builtin/lv_tlsf.c @@ -1242,4 +1242,4 @@ void * lv_tlsf_realloc(lv_tlsf_t tlsf, void * ptr, size_t size) return p; } -#endif /* LV_USE_BUILTIN_MALLOC */ +#endif /*LV_STDLIB_BUILTIN*/ diff --git a/src/stdlib/builtin/lv_tlsf.h b/src/stdlib/builtin/lv_tlsf.h index 066dae45e..0fa6decbe 100644 --- a/src/stdlib/builtin/lv_tlsf.h +++ b/src/stdlib/builtin/lv_tlsf.h @@ -105,4 +105,4 @@ int lv_tlsf_check_pool(lv_pool_t pool); #endif /*LV_TLSF_H*/ -#endif /* LV_USE_BUILTIN_MALLOC */ +#endif /*LV_STDLIB_BUILTIN*/ diff --git a/src/stdlib/clib/lv_mem_core_clib.c b/src/stdlib/clib/lv_mem_core_clib.c index 997c9d0a4..9cdddf4d1 100644 --- a/src/stdlib/clib/lv_mem_core_clib.c +++ b/src/stdlib/clib/lv_mem_core_clib.c @@ -91,4 +91,4 @@ lv_result_t lv_mem_test_core(void) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_BUILTIN_MALLOC*/ +#endif /*LV_STDLIB_CLIB*/ diff --git a/src/stdlib/clib/lv_string_clib.c b/src/stdlib/clib/lv_string_clib.c index 25a2873e7..8d9222245 100644 --- a/src/stdlib/clib/lv_string_clib.c +++ b/src/stdlib/clib/lv_string_clib.c @@ -8,12 +8,9 @@ #include "../../lv_conf_internal.h" #if LV_USE_STDLIB_STRING == LV_STDLIB_CLIB #include "../lv_string.h" +#include "../lv_mem.h" /*Need lv_malloc*/ #include -#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN - #include "../lv_mem.h" -#endif - /********************* * DEFINES *********************/ @@ -48,6 +45,11 @@ LV_ATTRIBUTE_FAST_MEM void lv_memset(void * dst, uint8_t v, size_t len) memset(dst, v, len); } +LV_ATTRIBUTE_FAST_MEM void * lv_memmove(void * dst, const void * src, size_t len) +{ + return memmove(dst, src, len); +} + size_t lv_strlen(const char * str) { return strlen(str); @@ -92,4 +94,4 @@ char * lv_strdup(const char * src) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_BUILTIN_MEMCPY*/ +#endif /*LV_STDLIB_CLIB*/ diff --git a/src/stdlib/lv_string.h b/src/stdlib/lv_string.h index 063163167..20cda4ecf 100644 --- a/src/stdlib/lv_string.h +++ b/src/stdlib/lv_string.h @@ -48,6 +48,15 @@ void * lv_memcpy(void * dst, const void * src, size_t len); */ void lv_memset(void * dst, uint8_t v, size_t len); +/** + * @brief Move a block of memory from source to destination + * @param dst Pointer to the destination array where the content is to be copied. + * @param src Pointer to the source of data to be copied. + * @param len Number of bytes to copy + * @return Pointer to the destination array. + */ +void * lv_memmove(void * dst, const void * src, size_t len); + /** * Same as `memset(dst, 0x00, len)`. * @param dst pointer to the destination buffer diff --git a/src/stdlib/micropython/lv_mem_core_micropython.c b/src/stdlib/micropython/lv_mem_core_micropython.c index a55b3be15..69c8bd681 100644 --- a/src/stdlib/micropython/lv_mem_core_micropython.c +++ b/src/stdlib/micropython/lv_mem_core_micropython.c @@ -92,4 +92,4 @@ lv_result_t lv_mem_test_core(void) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_BUILTIN_MALLOC*/ +#endif /*LV_STDLIB_MICROPYTHON*/ diff --git a/src/stdlib/rtthread/lv_mem_core_rtthread.c b/src/stdlib/rtthread/lv_mem_core_rtthread.c index 8e1f6fd26..29a600a6a 100644 --- a/src/stdlib/rtthread/lv_mem_core_rtthread.c +++ b/src/stdlib/rtthread/lv_mem_core_rtthread.c @@ -95,4 +95,4 @@ lv_result_t lv_mem_test_core(void) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_STDLIB_MALLOC*/ +#endif /*LV_STDLIB_RTTHREAD*/ diff --git a/src/stdlib/rtthread/lv_sprintf_rtthread.c b/src/stdlib/rtthread/lv_sprintf_rtthread.c index 835269dd3..721f4fd05 100644 --- a/src/stdlib/rtthread/lv_sprintf_rtthread.c +++ b/src/stdlib/rtthread/lv_sprintf_rtthread.c @@ -58,4 +58,4 @@ int lv_vsnprintf(char * buffer, size_t count, const char * format, va_list va) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_STDLIB_SPRINTF*/ +#endif /*LV_STDLIB_RTTHREAD*/ diff --git a/src/stdlib/rtthread/lv_string_rtthread.c b/src/stdlib/rtthread/lv_string_rtthread.c index f425c81e1..02480c74a 100644 --- a/src/stdlib/rtthread/lv_string_rtthread.c +++ b/src/stdlib/rtthread/lv_string_rtthread.c @@ -8,12 +8,9 @@ #include "../../lv_conf_internal.h" #if LV_USE_STDLIB_STRING == LV_STDLIB_RTTHREAD #include "../lv_string.h" +#include "../lv_mem.h" /*Need lv_malloc*/ #include -#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN - #include "../lv_mem.h" -#endif - /********************* * DEFINES *********************/ @@ -48,6 +45,11 @@ LV_ATTRIBUTE_FAST_MEM void lv_memset(void * dst, uint8_t v, size_t len) rt_memset(dst, v, len); } +LV_ATTRIBUTE_FAST_MEM void * lv_memmove(void * dst, const void * src, size_t len) +{ + return rt_memmove(dst, src, len); +} + size_t lv_strlen(const char * str) { return rt_strlen(str); @@ -87,4 +89,4 @@ char * lv_strdup(const char * src) * STATIC FUNCTIONS **********************/ -#endif /*LV_USE_STDLIB_STRING*/ +#endif /*LV_STDLIB_RTTHREAD*/