From 3093bb15dad84a2c2c46b56ebfb724793a5aa038 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Sun, 10 Nov 2019 11:14:57 +0800 Subject: [PATCH 1/4] [enhancement]Add string information for error --- components/finsh/cmd.c | 2 +- include/rtthread.h | 1 + src/kservice.c | 41 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/components/finsh/cmd.c b/components/finsh/cmd.c index 53b8755af1d..cbc446710f4 100644 --- a/components/finsh/cmd.c +++ b/components/finsh/cmd.c @@ -230,7 +230,7 @@ long list_thread(void) ptr = (rt_uint8_t *)thread->stack_addr; while (*ptr == '#')ptr ++; - rt_kprintf(" 0x%08x 0x%08x %02d%% 0x%08x %03d\n", + rt_kprintf(" 0x%08x 0x%08x %02d%% 0x%08x %m\n", thread->stack_size + ((rt_ubase_t)thread->stack_addr - (rt_ubase_t)thread->sp), thread->stack_size, (thread->stack_size - ((rt_ubase_t) ptr - (rt_ubase_t) thread->stack_addr)) * 100 diff --git a/include/rtthread.h b/include/rtthread.h index 13a1a4424bf..f7c4f971e4b 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -527,6 +527,7 @@ rt_device_t rt_console_get_device(void); rt_err_t rt_get_errno(void); void rt_set_errno(rt_err_t no); int *_rt_errno(void); +const char *rt_strerror(rt_err_t error); #if !defined(RT_USING_NEWLIB) && !defined(_WIN32) #ifndef errno #define errno *_rt_errno() diff --git a/src/kservice.c b/src/kservice.c index 202bd97f83b..ef9b6e53697 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -114,6 +114,40 @@ int *_rt_errno(void) } RTM_EXPORT(_rt_errno); +static const char rt_errno_strs[][8] = +{ + "OK", + "ERROR", + "ETIMOUT", + "ERSFULL", + "ERSEPTY", + "ENOMEM", + "ENOSYS", + "EBUSY", + "EIO", + "EINTRPT", + "EINVAL", + "EUNKNOW" +}; + +/** + * This function return a pointer to a string that contains the + * message of error. + * + * @param error the errorno code + * @return a point to error message string + */ +const char *rt_strerror(rt_err_t error) +{ + if (error < 0) + error = -error; + + return (error > RT_EINVAL + 1) ? + rt_errno_strs[RT_EINVAL + 1] : + rt_errno_strs[error]; +} +RTM_EXPORT(rt_strerror); + /** * This function will set the content of memory to specified value * @@ -910,8 +944,13 @@ rt_int32_t rt_vsnprintf(char *buf, } continue; + case 'm': + num = va_arg(args, rt_err_t); + s = rt_strerror(num); + case 's': - s = va_arg(args, char *); + if ((*fmt) == 's') + s = va_arg(args, char *); if (!s) s = "(NULL)"; len = rt_strlen(s); From 50caee655836d18f557b2530c447c8e8ba597f66 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Thu, 23 Jun 2022 08:15:23 +0800 Subject: [PATCH 2/4] Update src/kservice.c --- src/kservice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kservice.c b/src/kservice.c index d8ec0dd0de4..89c1c087630 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -53,7 +53,7 @@ RT_WEAK void rt_hw_us_delay(rt_uint32_t us) "Please consider implementing rt_hw_us_delay() in another file.")); } -static const char rt_errno_strs[][] = +static const char rt_errno_strs[][7] = { "OK", "ERROR", From 87ce789607800e41de48a060240ab2679ba9b348 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Thu, 23 Jun 2022 08:31:20 +0800 Subject: [PATCH 3/4] Update src/kservice.c Co-authored-by: Man, Jianting (Meco) <920369182@qq.com> --- src/kservice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kservice.c b/src/kservice.c index 89c1c087630..eb360e36434 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -53,7 +53,7 @@ RT_WEAK void rt_hw_us_delay(rt_uint32_t us) "Please consider implementing rt_hw_us_delay() in another file.")); } -static const char rt_errno_strs[][7] = +static const char* rt_errno_strs[] = { "OK", "ERROR", From c48d1651e3835ecb2fea88b6cafaf674a00ae527 Mon Sep 17 00:00:00 2001 From: a1012112796 <1012112796@qq.com> Date: Sat, 25 Jun 2022 15:12:03 +0800 Subject: [PATCH 4/4] remove %m Signed-off-by: a1012112796 <1012112796@qq.com> --- components/finsh/cmd.c | 4 ++-- src/kservice.c | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/components/finsh/cmd.c b/components/finsh/cmd.c index 8a8fc05b37b..70cd934f64f 100644 --- a/components/finsh/cmd.c +++ b/components/finsh/cmd.c @@ -230,13 +230,13 @@ long list_thread(void) #else ptr = (rt_uint8_t *)thread->stack_addr; while (*ptr == '#') ptr ++; - rt_kprintf(" 0x%08x 0x%08x %02d%% 0x%08x %m\n", + rt_kprintf(" 0x%08x 0x%08x %02d%% 0x%08x %s\n", thread->stack_size + ((rt_ubase_t)thread->stack_addr - (rt_ubase_t)thread->sp), thread->stack_size, (thread->stack_size - ((rt_ubase_t) ptr - (rt_ubase_t) thread->stack_addr)) * 100 / thread->stack_size, thread->remaining_tick, - thread->error); + rt_strerror(thread->error)); #endif } } diff --git a/src/kservice.c b/src/kservice.c index eb360e36434..dfa0da9cd62 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -1016,13 +1016,8 @@ RT_WEAK int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list arg } continue; - case 'm': - num = va_arg(args, rt_err_t); - s = rt_strerror(num); - case 's': - if ((*fmt) == 's') - s = va_arg(args, char *); + s = va_arg(args, char *); if (!s) s = "(NULL)"; for (len = 0; (len != field_width) && (s[len] != '\0'); len++);