Merge pull request #5310 from mysterywolf/printf2
[kservice] 优化RT_PRINTF_LONGLONG,减少重复代码
This commit is contained in:
commit
9c78680f36
222
src/Kconfig
222
src/Kconfig
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue