Merge pull request #5310 from mysterywolf/printf2

[kservice] 优化RT_PRINTF_LONGLONG,减少重复代码
This commit is contained in:
Bernard Xiong 2021-11-29 02:14:18 +08:00 committed by GitHub
commit 9c78680f36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 133 additions and 151 deletions

View File

@ -115,37 +115,40 @@ config RT_USING_TIMER_SOFT
thread. thread.
if RT_USING_TIMER_SOFT if RT_USING_TIMER_SOFT
config RT_TIMER_THREAD_PRIO config RT_TIMER_THREAD_PRIO
int "The priority level value of timer thread" int "The priority level value of timer thread"
default 4 default 4
config RT_TIMER_THREAD_STACK_SIZE
int "The stack size of timer thread"
default 512
config RT_TIMER_THREAD_STACK_SIZE
int "The stack size of timer thread"
default 512
endif endif
menu "kservice optimization" menu "kservice optimization"
config RT_KSERVICE_USING_STDLIB config RT_KSERVICE_USING_STDLIB
bool "Enable kservice to use standard C library" bool "Enable kservice to use standard C library"
default n default n
config RT_KSERVICE_USING_TINY_SIZE config RT_KSERVICE_USING_TINY_SIZE
bool "Enable kservice to use tiny size" bool "Enable kservice to use tiny size"
default n default n
config RT_USING_ASM_MEMCPY config RT_USING_ASM_MEMCPY
bool bool
default n default n
config RT_USING_ASM_MEMSET config RT_USING_ASM_MEMSET
bool bool
default n default n
config RT_USING_TINY_FFS 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 default n
config RT_PRINTF_LONGLONG
bool "Enable rt_printf-family functions to support long long format"
default n
endmenu endmenu
@ -155,121 +158,122 @@ menuconfig RT_DEBUG
if RT_DEBUG if RT_DEBUG
config RT_DEBUG_COLOR config RT_DEBUG_COLOR
bool "Enable color debugging log" bool "Enable color debugging log"
default n default n
config RT_DEBUG_INIT_CONFIG config RT_DEBUG_INIT_CONFIG
bool "Enable debugging of components initialization" bool "Enable debugging of components initialization"
default n default n
config RT_DEBUG_INIT config RT_DEBUG_INIT
int int
default 1 if RT_DEBUG_INIT_CONFIG default 1 if RT_DEBUG_INIT_CONFIG
config RT_DEBUG_THREAD_CONFIG config RT_DEBUG_THREAD_CONFIG
bool "Enable debugging of Thread State Changes" bool "Enable debugging of Thread State Changes"
default n default n
config RT_DEBUG_THREAD config RT_DEBUG_THREAD
int int
default 1 if RT_DEBUG_THREAD_CONFIG default 1 if RT_DEBUG_THREAD_CONFIG
config RT_DEBUG_SCHEDULER_CONFIG config RT_DEBUG_SCHEDULER_CONFIG
bool "Enable debugging of Scheduler" bool "Enable debugging of Scheduler"
default n default n
config RT_DEBUG_SCHEDULER config RT_DEBUG_SCHEDULER
int int
default 1 if RT_DEBUG_SCHEDULER_CONFIG default 1 if RT_DEBUG_SCHEDULER_CONFIG
config RT_DEBUG_IPC_CONFIG config RT_DEBUG_IPC_CONFIG
bool "Enable debugging of IPC" bool "Enable debugging of IPC"
default n default n
config RT_DEBUG_IPC config RT_DEBUG_IPC
int int
default 1 if RT_DEBUG_IPC_CONFIG default 1 if RT_DEBUG_IPC_CONFIG
config RT_DEBUG_TIMER_CONFIG config RT_DEBUG_TIMER_CONFIG
bool "Enable debugging of Timer" bool "Enable debugging of Timer"
default n default n
config RT_DEBUG_TIMER config RT_DEBUG_TIMER
int int
default 1 if RT_DEBUG_TIMER_CONFIG default 1 if RT_DEBUG_TIMER_CONFIG
config RT_DEBUG_IRQ_CONFIG config RT_DEBUG_IRQ_CONFIG
bool "Enable debugging of IRQ(Interrupt Request)" bool "Enable debugging of IRQ(Interrupt Request)"
default n default n
config RT_DEBUG_IRQ config RT_DEBUG_IRQ
int int
default 1 if RT_DEBUG_IRQ_CONFIG default 1 if RT_DEBUG_IRQ_CONFIG
config RT_DEBUG_MEM_CONFIG config RT_DEBUG_MEM_CONFIG
bool "Enable debugging of Small Memory Algorithm" bool "Enable debugging of Small Memory Algorithm"
default n default n
config RT_DEBUG_MEM config RT_DEBUG_MEM
int int
default 1 if RT_DEBUG_MEM_CONFIG default 1 if RT_DEBUG_MEM_CONFIG
config RT_DEBUG_SLAB_CONFIG config RT_DEBUG_SLAB_CONFIG
bool "Enable debugging of SLAB Memory Algorithm" bool "Enable debugging of SLAB Memory Algorithm"
default n default n
config RT_DEBUG_SLAB config RT_DEBUG_SLAB
int int
default 1 if RT_DEBUG_SLAB_CONFIG default 1 if RT_DEBUG_SLAB_CONFIG
config RT_DEBUG_MEMHEAP_CONFIG config RT_DEBUG_MEMHEAP_CONFIG
bool "Enable debugging of Memory Heap Algorithm" bool "Enable debugging of Memory Heap Algorithm"
default n default n
config RT_DEBUG_MEMHEAP config RT_DEBUG_MEMHEAP
int int
default 1 if RT_DEBUG_MEMHEAP_CONFIG default 1 if RT_DEBUG_MEMHEAP_CONFIG
config RT_DEBUG_MODULE_CONFIG config RT_DEBUG_MODULE_CONFIG
bool "Enable debugging of Application Module" bool "Enable debugging of Application Module"
default n default n
config RT_DEBUG_MODULE config RT_DEBUG_MODULE
int int
default 1 if RT_DEBUG_MODULE_CONFIG default 1 if RT_DEBUG_MODULE_CONFIG
endif endif
menu "Inter-Thread communication" menu "Inter-Thread communication"
config RT_USING_SEMAPHORE config RT_USING_SEMAPHORE
bool "Enable semaphore" bool "Enable semaphore"
default y default y
config RT_USING_MUTEX config RT_USING_MUTEX
bool "Enable mutex" bool "Enable mutex"
default y default y
config RT_USING_EVENT config RT_USING_EVENT
bool "Enable event flag" bool "Enable event flag"
default y default y
config RT_USING_MAILBOX config RT_USING_MAILBOX
bool "Enable mailbox" bool "Enable mailbox"
default y default y
config RT_USING_MESSAGEQUEUE config RT_USING_MESSAGEQUEUE
bool "Enable message queue" bool "Enable message queue"
default y default y
config RT_USING_SIGNALS
bool "Enable signals"
select RT_USING_MEMPOOL
default n
help
A signal is an asynchronous notification sent to a specific thread
in order to notify it of an event that occurred.
config RT_USING_SIGNALS
bool "Enable signals"
select RT_USING_MEMPOOL
default n
help
A signal is an asynchronous notification sent to a specific thread
in order to notify it of an event that occurred.
endmenu endmenu
menu "Memory Management" menu "Memory Management"
@ -375,10 +379,6 @@ menu "Kernel Device Object"
config RT_CONSOLE_DEVICE_NAME config RT_CONSOLE_DEVICE_NAME
string "the device name for console" string "the device name for console"
default "uart" default "uart"
config RT_PRINTF_LONGLONG
bool "rt_kprintf support long long"
default n
endif endif
endmenu endmenu

View File

@ -593,7 +593,6 @@ RTM_EXPORT(rt_show_version);
/* private function */ /* private function */
#define _ISDIGIT(c) ((unsigned)((c) - '0') < 10) #define _ISDIGIT(c) ((unsigned)((c) - '0') < 10)
#ifdef RT_PRINTF_LONGLONG
/** /**
* This function will duplicate a string. * This function will duplicate a string.
* *
@ -603,44 +602,38 @@ RTM_EXPORT(rt_show_version);
* *
* @return the duplicated string pointer. * @return the duplicated string pointer.
*/ */
#ifdef RT_PRINTF_LONGLONG
rt_inline int divide(long long *n, int base) rt_inline int divide(long long *n, int base)
{
int res;
/* optimized for processor which does not support divide instructions. */
if (base == 10)
{
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 #else
rt_inline int divide(long *n, int base) rt_inline int divide(long *n, int base)
#endif /* RT_PRINTF_LONGLONG */
{ {
int res; int res;
/* optimized for processor which does not support divide instructions. */ /* optimized for processor which does not support divide instructions. */
if (base == 10) 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)*n) % 10U); res = (int)(((unsigned long)*n) % 10U);
*n = (long)(((unsigned long)*n) / 10U); *n = (long)(((unsigned long)*n) / 10U);
#endif
} }
else 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); res = (int)(((unsigned long)*n) % 16U);
*n = (long)(((unsigned long)*n) / 16U); *n = (long)(((unsigned long)*n) / 16U);
#endif
} }
return res; return res;
} }
#endif /* RT_PRINTF_LONGLONG */
rt_inline int skip_atoi(const char **s) rt_inline int skip_atoi(const char **s)
{ {
@ -659,30 +652,19 @@ rt_inline int skip_atoi(const char **s)
#define SPECIAL (1 << 5) /* 0x */ #define SPECIAL (1 << 5) /* 0x */
#define LARGE (1 << 6) /* use 'ABCDEF' instead of 'abcdef' */ #define LARGE (1 << 6) /* use 'ABCDEF' instead of 'abcdef' */
static char *print_number(char *buf,
char *end,
#ifdef RT_PRINTF_LONGLONG
long long num,
#else
long num,
#endif /* RT_PRINTF_LONGLONG */
int base,
int s,
#ifdef RT_PRINTF_PRECISION #ifdef RT_PRINTF_PRECISION
static char *print_number(char *buf,
char *end,
#ifdef RT_PRINTF_LONGLONG
long long num,
#else
long num,
#endif /* RT_PRINTF_LONGLONG */
int base,
int s,
int precision, int precision,
int type)
#else
static char *print_number(char *buf,
char *end,
#ifdef RT_PRINTF_LONGLONG
long long num,
#else
long num,
#endif /* RT_PRINTF_LONGLONG */
int base,
int s,
int type)
#endif /* RT_PRINTF_PRECISION */ #endif /* RT_PRINTF_PRECISION */
int type)
{ {
char c, sign; char c, sign;
#ifdef RT_PRINTF_LONGLONG #ifdef RT_PRINTF_LONGLONG