浏览代码

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

Man, Jianting (Meco) 3 年之前
父节点
当前提交
86a10716cd
共有 3 个文件被更改,包括 2 次插入24 次删除
  1. 1 0
      components/utilities/Kconfig
  2. 0 9
      components/utilities/ulog/syslog/syslog.c
  3. 1 15
      components/utilities/ulog/ulog.c

+ 1 - 0
components/utilities/Kconfig

@@ -137,6 +137,7 @@ config RT_USING_ULOG
             config ULOG_OUTPUT_FLOAT
             config ULOG_OUTPUT_FLOAT
                 bool "Enable float number support. It will using more thread stack."
                 bool "Enable float number support. It will using more thread stack."
                 default n
                 default n
+                select PKG_USING_RT_VSNPRINTF_FULL
                 help
                 help
                     The default formater is using rt_vsnprint and it not supported float number.
                     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.
                     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 <stdint.h>
 #include "syslog.h"
 #include "syslog.h"
 
 
-#ifdef ULOG_OUTPUT_FLOAT
-#include <stdio.h>
-#endif
-
 /*
 /*
  * reference:
  * reference:
  * http://pubs.opengroup.org/onlinepubs/7908799/xsh/syslog.h.html
  * 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 */
 #endif /* ULOG_OUTPUT_THREAD_NAME */
 
 
     log_len += ulog_strcpy(log_len, log_buf + log_len, ": ");
     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);
     fmt_result = rt_vsnprintf(log_buf + log_len, ULOG_LINE_BUF_SIZE - log_len, format, args);
-#endif /* ULOG_OUTPUT_FLOAT */
 
 
     /* calculate log length */
     /* calculate log length */
     if ((log_len + fmt_result <= ULOG_LINE_BUF_SIZE) && (fmt_result > -1))
     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>
 #include <syslog.h>
 #endif
 #endif
 
 
-#ifdef ULOG_OUTPUT_FLOAT
-#include <stdio.h>
-#endif
-
 #ifdef ULOG_TIME_USING_TIMESTAMP
 #ifdef ULOG_TIME_USING_TIMESTAMP
 #include <sys/time.h>
 #include <sys/time.h>
 #endif
 #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 */
 #endif /* ULOG_OUTPUT_THREAD_NAME */
 
 
     log_len += ulog_strcpy(log_len, log_buf + log_len, ": ");
     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);
     fmt_result = rt_vsnprintf(log_buf + log_len, ULOG_LINE_BUF_SIZE - log_len, format, args);
-#endif /* ULOG_OUTPUT_FLOAT */
 
 
     /* calculate log length */
     /* calculate log length */
     if ((log_len + fmt_result <= ULOG_LINE_BUF_SIZE) && (fmt_result > -1))
     if ((log_len + fmt_result <= ULOG_LINE_BUF_SIZE) && (fmt_result > -1))
@@ -674,15 +665,10 @@ void ulog_raw(const char *format, ...)
 
 
     /* lock output */
     /* lock output */
     output_lock();
     output_lock();
+
     /* args point to the first variable parameter */
     /* args point to the first variable parameter */
     va_start(args, format);
     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);
     fmt_result = rt_vsnprintf(log_buf, ULOG_LINE_BUF_SIZE, format, args);
-#endif /* ULOG_OUTPUT_FLOAT */
-
     va_end(args);
     va_end(args);
 
 
     /* calculate log length */
     /* calculate log length */