diff options
| author | Meco Man <[email protected]> | 2021-11-27 18:25:33 -0500 |
|---|---|---|
| committer | Meco Man <[email protected]> | 2021-11-27 18:30:41 -0500 |
| commit | 6a863ef65cbdd3bb12404e9871b391a3bcdc0984 (patch) | |
| tree | b6d40c6b23253e11c965ff8af75f9310b9dd6c04 | |
| parent | e055a0077867191abee1e95713438dd8c4db0dd4 (diff) | |
[kservice] 优化RT_PRINTF_LONGLONG,减少重复代码
| -rw-r--r-- | src/Kconfig | 10 | ||||
| -rw-r--r-- | src/kservice.c | 29 |
2 files changed, 16 insertions, 23 deletions
diff --git a/src/Kconfig b/src/Kconfig index 427a65eb74..a11cb856cf 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -144,7 +144,11 @@ config RT_USING_ASM_MEMSET default n config RT_USING_TINY_FFS - bool "Enable kservice to use tiny ffs" + bool "Enable kservice to use tiny finding first bit set method" + default n + +config RT_PRINTF_LONGLONG + bool "Enable rt_xprintf functions to support long long format" default n endmenu @@ -375,10 +379,6 @@ menu "Kernel Device Object" config RT_CONSOLE_DEVICE_NAME string "the device name for console" default "uart" - - config RT_PRINTF_LONGLONG - bool "rt_kprintf support long long" - default n endif endmenu diff --git a/src/kservice.c b/src/kservice.c index aa5b39075c..5e877e5d2a 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -593,7 +593,6 @@ RTM_EXPORT(rt_show_version); /* private function */ #define _ISDIGIT(c) ((unsigned)((c) - '0') < 10) -#ifdef RT_PRINTF_LONGLONG /** * This function will duplicate a string. * @@ -603,44 +602,38 @@ RTM_EXPORT(rt_show_version); * * @return the duplicated string pointer. */ +#ifdef RT_PRINTF_LONGLONG rt_inline int divide(long long *n, int base) +#else +rt_inline int divide(long *n, int base) +#endif /* RT_PRINTF_LONGLONG */ { int res; /* optimized for processor which does not support divide instructions. */ if (base == 10) { +#ifdef RT_PRINTF_LONGLONG res = (int)(((unsigned long long)*n) % 10U); *n = (long long)(((unsigned long long)*n) / 10U); - } - else - { - res = (int)(((unsigned long long)*n) % 16U); - *n = (long long)(((unsigned long long)*n) / 16U); - } - - return res; -} #else -rt_inline int divide(long *n, int base) -{ - int res; - - /* optimized for processor which does not support divide instructions. */ - if (base == 10) - { res = (int)(((unsigned long)*n) % 10U); *n = (long)(((unsigned long)*n) / 10U); +#endif } else { +#ifdef RT_PRINTF_LONGLONG + res = (int)(((unsigned long long)*n) % 16U); + *n = (long long)(((unsigned long long)*n) / 16U); +#else res = (int)(((unsigned long)*n) % 16U); *n = (long)(((unsigned long)*n) / 16U); +#endif } return res; } -#endif /* RT_PRINTF_LONGLONG */ rt_inline int skip_atoi(const char **s) { |
