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

This commit is contained in:
Man, Jianting (Meco) 2022-03-06 12:14:22 -05:00 committed by GitHub
parent 38ed2a3ec4
commit 86a10716cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 2 additions and 24 deletions

View File

@ -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.

View File

@ -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))

View File

@ -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 */