diff --git a/src/Kconfig b/src/Kconfig index 427a65eb74..8647d35698 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -115,37 +115,40 @@ config RT_USING_TIMER_SOFT thread. if RT_USING_TIMER_SOFT -config RT_TIMER_THREAD_PRIO - int "The priority level value of timer thread" - default 4 - -config RT_TIMER_THREAD_STACK_SIZE - int "The stack size of timer thread" - default 512 + config RT_TIMER_THREAD_PRIO + int "The priority level value of timer thread" + default 4 + config RT_TIMER_THREAD_STACK_SIZE + int "The stack size of timer thread" + default 512 endif menu "kservice optimization" -config RT_KSERVICE_USING_STDLIB - bool "Enable kservice to use standard C library" - default n + config RT_KSERVICE_USING_STDLIB + bool "Enable kservice to use standard C library" + default n -config RT_KSERVICE_USING_TINY_SIZE - bool "Enable kservice to use tiny size" - default n + config RT_KSERVICE_USING_TINY_SIZE + bool "Enable kservice to use tiny size" + default n -config RT_USING_ASM_MEMCPY - bool - default n + config RT_USING_ASM_MEMCPY + bool + default n -config RT_USING_ASM_MEMSET - bool - default n + config RT_USING_ASM_MEMSET + bool + default n -config RT_USING_TINY_FFS - bool "Enable kservice to use tiny ffs" - default n + config RT_USING_TINY_FFS + bool "Enable kservice to use tiny finding first bit set method" + default n + + config RT_PRINTF_LONGLONG + bool "Enable rt_printf-family functions to support long long format" + default n endmenu @@ -155,121 +158,122 @@ menuconfig RT_DEBUG if RT_DEBUG -config RT_DEBUG_COLOR - bool "Enable color debugging log" - default n + config RT_DEBUG_COLOR + bool "Enable color debugging log" + default n -config RT_DEBUG_INIT_CONFIG - bool "Enable debugging of components initialization" - default n + config RT_DEBUG_INIT_CONFIG + bool "Enable debugging of components initialization" + default n -config RT_DEBUG_INIT - int - default 1 if RT_DEBUG_INIT_CONFIG + config RT_DEBUG_INIT + int + default 1 if RT_DEBUG_INIT_CONFIG -config RT_DEBUG_THREAD_CONFIG - bool "Enable debugging of Thread State Changes" - default n + config RT_DEBUG_THREAD_CONFIG + bool "Enable debugging of Thread State Changes" + default n -config RT_DEBUG_THREAD - int - default 1 if RT_DEBUG_THREAD_CONFIG + config RT_DEBUG_THREAD + int + default 1 if RT_DEBUG_THREAD_CONFIG -config RT_DEBUG_SCHEDULER_CONFIG - bool "Enable debugging of Scheduler" - default n + config RT_DEBUG_SCHEDULER_CONFIG + bool "Enable debugging of Scheduler" + default n -config RT_DEBUG_SCHEDULER - int - default 1 if RT_DEBUG_SCHEDULER_CONFIG + config RT_DEBUG_SCHEDULER + int + default 1 if RT_DEBUG_SCHEDULER_CONFIG -config RT_DEBUG_IPC_CONFIG - bool "Enable debugging of IPC" - default n + config RT_DEBUG_IPC_CONFIG + bool "Enable debugging of IPC" + default n -config RT_DEBUG_IPC - int - default 1 if RT_DEBUG_IPC_CONFIG + config RT_DEBUG_IPC + int + default 1 if RT_DEBUG_IPC_CONFIG -config RT_DEBUG_TIMER_CONFIG - bool "Enable debugging of Timer" - default n + config RT_DEBUG_TIMER_CONFIG + bool "Enable debugging of Timer" + default n -config RT_DEBUG_TIMER - int - default 1 if RT_DEBUG_TIMER_CONFIG + config RT_DEBUG_TIMER + int + default 1 if RT_DEBUG_TIMER_CONFIG -config RT_DEBUG_IRQ_CONFIG - bool "Enable debugging of IRQ(Interrupt Request)" - default n + config RT_DEBUG_IRQ_CONFIG + bool "Enable debugging of IRQ(Interrupt Request)" + default n -config RT_DEBUG_IRQ - int - default 1 if RT_DEBUG_IRQ_CONFIG + config RT_DEBUG_IRQ + int + default 1 if RT_DEBUG_IRQ_CONFIG -config RT_DEBUG_MEM_CONFIG - bool "Enable debugging of Small Memory Algorithm" - default n + config RT_DEBUG_MEM_CONFIG + bool "Enable debugging of Small Memory Algorithm" + default n -config RT_DEBUG_MEM - int - default 1 if RT_DEBUG_MEM_CONFIG + config RT_DEBUG_MEM + int + default 1 if RT_DEBUG_MEM_CONFIG -config RT_DEBUG_SLAB_CONFIG - bool "Enable debugging of SLAB Memory Algorithm" - default n + config RT_DEBUG_SLAB_CONFIG + bool "Enable debugging of SLAB Memory Algorithm" + default n -config RT_DEBUG_SLAB - int - default 1 if RT_DEBUG_SLAB_CONFIG + config RT_DEBUG_SLAB + int + default 1 if RT_DEBUG_SLAB_CONFIG -config RT_DEBUG_MEMHEAP_CONFIG - bool "Enable debugging of Memory Heap Algorithm" - default n + config RT_DEBUG_MEMHEAP_CONFIG + bool "Enable debugging of Memory Heap Algorithm" + default n -config RT_DEBUG_MEMHEAP - int - default 1 if RT_DEBUG_MEMHEAP_CONFIG + config RT_DEBUG_MEMHEAP + int + default 1 if RT_DEBUG_MEMHEAP_CONFIG -config RT_DEBUG_MODULE_CONFIG - bool "Enable debugging of Application Module" - default n + config RT_DEBUG_MODULE_CONFIG + bool "Enable debugging of Application Module" + default n -config RT_DEBUG_MODULE - int - default 1 if RT_DEBUG_MODULE_CONFIG + config RT_DEBUG_MODULE + int + default 1 if RT_DEBUG_MODULE_CONFIG endif menu "Inter-Thread communication" -config RT_USING_SEMAPHORE - bool "Enable semaphore" - default y + config RT_USING_SEMAPHORE + bool "Enable semaphore" + default y -config RT_USING_MUTEX - bool "Enable mutex" - default y + config RT_USING_MUTEX + bool "Enable mutex" + default y -config RT_USING_EVENT - bool "Enable event flag" - default y + config RT_USING_EVENT + bool "Enable event flag" + default y -config RT_USING_MAILBOX - bool "Enable mailbox" - default y + config RT_USING_MAILBOX + bool "Enable mailbox" + default y -config RT_USING_MESSAGEQUEUE - bool "Enable message queue" - default y + config RT_USING_MESSAGEQUEUE + bool "Enable message queue" + 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 menu "Memory Management" @@ -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..8b959cbd68 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) -{ - 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 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)*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) { @@ -659,30 +652,19 @@ rt_inline int skip_atoi(const char **s) #define SPECIAL (1 << 5) /* 0x */ #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 -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 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 */ + int type) { char c, sign; #ifdef RT_PRINTF_LONGLONG