From 00cebaacace8d3c77655bc7ce751a0aa5abd0784 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sun, 28 Feb 2021 05:07:02 +0800 Subject: [PATCH] add RT_KERVICE_USING_STDLIB --- include/rtthread.h | 33 ++++++++++++++++++++++++--------- src/Kconfig | 4 ++++ src/kservice.c | 5 +++++ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/include/rtthread.h b/include/rtthread.h index 1e0094e73b..9d537d6e4d 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -14,6 +14,7 @@ * 2013-06-24 Bernard add rt_kprintf re-define when not use RT_USING_CONSOLE. * 2016-08-09 ArdaFu add new thread and interrupt hook. * 2018-11-22 Jesven add all cpu's lock and ipi handler + * 2021-02-28 Meco Man add RT_KERVICE_USING_STDLIB */ #ifndef __RT_THREAD_H__ @@ -516,7 +517,9 @@ void rt_components_board_init(void); #else void rt_kprintf(const char *fmt, ...); void rt_kputs(const char *str); +rt_int32_t rt_sscanf(const char *buf, const char *fmt, ...); #endif + rt_int32_t rt_vsprintf(char *dest, const char *format, va_list arg_ptr); rt_int32_t rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args); rt_int32_t rt_sprintf(char *buf, const char *format, ...); @@ -541,23 +544,35 @@ int __rt_ffs(int value); void *rt_memset(void *src, int c, rt_ubase_t n); void *rt_memcpy(void *dest, const void *src, rt_ubase_t n); +#ifndef RT_KERVICE_USING_STDLIB +void *rt_memmove(void *dest, const void *src, rt_ubase_t n); +rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count); +char *rt_strstr(const char *str1, const char *str2); +rt_int32_t rt_strcasecmp(const char *a, const char *b); +char *rt_strncpy(char *dest, const char *src, rt_ubase_t n); rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count); rt_int32_t rt_strcmp(const char *cs, const char *ct); -rt_size_t rt_strlen(const char *src); rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen); +rt_size_t rt_strlen(const char *src); +#else +#include +#define rt_memmove(dest, src, n) memmove(dest, src, n) +#define rt_memcmp(cs, ct, count) memcmp(cs, ct, count) +#define rt_strstr(str1, str2) strstr(str1, str2) +#define rt_strcasecmp(a, b) strcasecmp(a, b) +#define rt_strncpy(dest, src, n) strncpy(dest, src, n) +#define rt_strncmp(cs, ct, count) strncmp(cs, ct, count) +#define rt_strcmp(cs, ct) strcmp(cs, ct) +#define rt_strnlen(s, maxlen) strnlen(s, maxlen) +#define rt_strlen(src) strlen(src) +#endif /*RT_KERVICE_USING_STDLIB*/ + char *rt_strdup(const char *s); #if defined(__CC_ARM) || defined(__CLANG_ARM) -/* leak strdup interface */ +/* lack strdup interface */ char* strdup(const char* str); #endif -char *rt_strstr(const char *str1, const char *str2); -rt_int32_t rt_sscanf(const char *buf, const char *fmt, ...); -char *rt_strncpy(char *dest, const char *src, rt_ubase_t n); -void *rt_memmove(void *dest, const void *src, rt_ubase_t n); -rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count); -rt_int32_t rt_strcasecmp(const char *a, const char *b); - void rt_show_version(void); #ifdef RT_DEBUG diff --git a/src/Kconfig b/src/Kconfig index 803c827e51..5bc9adda52 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -116,6 +116,10 @@ config RT_TIMER_THREAD_STACK_SIZE endif +config RT_KERVICE_USING_STDLIB + bool "Enable kservice to use standard C library" + default n + menuconfig RT_DEBUG bool "Enable debugging features" default y diff --git a/src/kservice.c b/src/kservice.c index 9fc3971c7e..29097bafac 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -17,6 +17,7 @@ * 2013-06-24 Bernard remove rt_kprintf if RT_USING_CONSOLE is not defined. * 2013-09-24 aozima make sure the device is in STREAM mode when used by rt_kprintf. * 2015-07-06 Bernard Add rt_assert_handler routine. + * 2021-02-28 Meco Man add RT_KERVICE_USING_STDLIB */ #include @@ -280,6 +281,8 @@ RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) } RTM_EXPORT(rt_memcpy); +#ifndef RT_KERVICE_USING_STDLIB + /** * This function will move memory content from source address to destination * address. @@ -506,6 +509,8 @@ rt_size_t rt_strlen(const char *s) } RTM_EXPORT(rt_strlen); +#endif /*RT_KERVICE_USING_STDLIB*/ + #ifdef RT_USING_HEAP /** * This function will duplicate a string. -- GitLab