Переглянути джерело

优化ULOG_OUTPUT_FLOAT,避免使用内置libc的vsnprintf函数 (#5632)

Man, Jianting (Meco) 3 роки тому
батько
коміт
86a10716cd

+ 1 - 0
components/utilities/Kconfig

@@ -137,6 +137,7 @@ config RT_USING_ULOG
             config ULOG_OUTPUT_FLOAT
                 bool "Enable float number support. It will using more thread stack."
                 default n
+                select PKG_USING_RT_VSNPRINTF_FULL
                 help
                     The default formater is using rt_vsnprint and it not supported float number.
                     When enable this option then it will enable libc. The formater will change to vsnprint on libc.

+ 0 - 9
components/utilities/ulog/syslog/syslog.c

@@ -14,10 +14,6 @@
 #include <stdint.h>
 #include "syslog.h"
 
-#ifdef ULOG_OUTPUT_FLOAT
-#include <stdio.h>
-#endif
-
 /*
  * reference:
  * http://pubs.opengroup.org/onlinepubs/7908799/xsh/syslog.h.html
@@ -227,12 +223,7 @@ RT_WEAK rt_size_t syslog_formater(char *log_buf, int level, const char *tag, rt_
 #endif /* ULOG_OUTPUT_THREAD_NAME */
 
     log_len += ulog_strcpy(log_len, log_buf + log_len, ": ");
-
-#ifdef ULOG_OUTPUT_FLOAT
-    fmt_result = vsnprintf(log_buf + log_len, ULOG_LINE_BUF_SIZE - log_len, format, args);
-#else
     fmt_result = rt_vsnprintf(log_buf + log_len, ULOG_LINE_BUF_SIZE - log_len, format, args);
-#endif /* ULOG_OUTPUT_FLOAT */
 
     /* calculate log length */
     if ((log_len + fmt_result <= ULOG_LINE_BUF_SIZE) && (fmt_result > -1))

+ 1 - 15
components/utilities/ulog/ulog.c

@@ -16,10 +16,6 @@
 #include <syslog.h>
 #endif
 
-#ifdef ULOG_OUTPUT_FLOAT
-#include <stdio.h>
-#endif
-
 #ifdef ULOG_TIME_USING_TIMESTAMP
 #include <sys/time.h>
 #endif
@@ -367,12 +363,7 @@ RT_WEAK rt_size_t ulog_formater(char *log_buf, rt_uint32_t level, const char *ta
 #endif /* ULOG_OUTPUT_THREAD_NAME */
 
     log_len += ulog_strcpy(log_len, log_buf + log_len, ": ");
-
-#ifdef ULOG_OUTPUT_FLOAT
-    fmt_result = vsnprintf(log_buf + log_len, ULOG_LINE_BUF_SIZE - log_len, format, args);
-#else
     fmt_result = rt_vsnprintf(log_buf + log_len, ULOG_LINE_BUF_SIZE - log_len, format, args);
-#endif /* ULOG_OUTPUT_FLOAT */
 
     /* calculate log length */
     if ((log_len + fmt_result <= ULOG_LINE_BUF_SIZE) && (fmt_result > -1))
@@ -674,15 +665,10 @@ void ulog_raw(const char *format, ...)
 
     /* lock output */
     output_lock();
+
     /* args point to the first variable parameter */
     va_start(args, format);
-
-#ifdef ULOG_OUTPUT_FLOAT
-    fmt_result = vsnprintf(log_buf, ULOG_LINE_BUF_SIZE, format, args);
-#else
     fmt_result = rt_vsnprintf(log_buf, ULOG_LINE_BUF_SIZE, format, args);
-#endif /* ULOG_OUTPUT_FLOAT */
-
     va_end(args);
 
     /* calculate log length */