From eafd97b3bdfc150ce62d0b02be9d0506231c7262 Mon Sep 17 00:00:00 2001 From: Kilian Bracher Date: Mon, 31 Mar 2025 19:51:59 +0200 Subject: [PATCH] refactor: convert log macros to functions reduces program size by ~1/3rd 33k -> 19k --- AMS_Master_Code/Core/Inc/swo_log.h | 90 +++++++++++++++++------------- 1 file changed, 52 insertions(+), 38 deletions(-) diff --git a/AMS_Master_Code/Core/Inc/swo_log.h b/AMS_Master_Code/Core/Inc/swo_log.h index 1eb1e68..10e3ee6 100644 --- a/AMS_Master_Code/Core/Inc/swo_log.h +++ b/AMS_Master_Code/Core/Inc/swo_log.h @@ -104,44 +104,58 @@ static void debug_clear_console() { } } -#define debug_log(level, msg, ...) \ - do { \ - if (DEBUG_CHANNEL_ENABLED(level)) { \ - char __swo_buffer[MAX_MESSAGE_LENGTH]; \ - size_t len = \ - snprintf(__swo_buffer, sizeof(__swo_buffer), msg, ##__VA_ARGS__); \ - __swo_putc('\n', level); \ - /* Print timestamp if enabled */ \ - if (PRINT_TIMESTAMP) { \ - char __time_buffer[16]; \ - if (USE_ANSI_ESCAPE_CODES) { \ - snprintf(__time_buffer, sizeof(__time_buffer), \ - "\033[90m[%lu]\033[0m ", HAL_GetTick()); \ - } else { \ - snprintf(__time_buffer, sizeof(__time_buffer), "[%lu] ", \ - HAL_GetTick()); \ - } \ - __swo_print(level, __time_buffer); \ - } \ - __swo_print(level, log_level_names[level]); \ - __swo_print(level, __swo_buffer); \ - if (len >= sizeof(__swo_buffer)) { \ - __swo_print(level, " [message length exceeded] "); \ - } \ - } \ - } while (0) +[[maybe_unused, gnu::format(printf, 2, 3)]] +static inline void debug_log(unsigned int level, const char *msg, ...) { + if (!DEBUG_CHANNEL_ENABLED(level)) { + return; + } + + char __swo_buffer[MAX_MESSAGE_LENGTH]; + va_list args; + va_start(args, msg); + size_t len = vsnprintf(__swo_buffer, sizeof(__swo_buffer), msg, args); + va_end(args); + + __swo_putc('\n', level); + + /* Print timestamp if enabled */ + if (PRINT_TIMESTAMP) { + char __time_buffer[16]; + if (USE_ANSI_ESCAPE_CODES) { + snprintf(__time_buffer, sizeof(__time_buffer), + "\033[90m[%lu]\033[0m ", HAL_GetTick()); + } else { + snprintf(__time_buffer, sizeof(__time_buffer), "[%lu] ", + HAL_GetTick()); + } + __swo_print(level, __time_buffer); + } + + __swo_print(level, log_level_names[level]); + __swo_print(level, __swo_buffer); + + if (len >= sizeof(__swo_buffer)) { + __swo_print(level, " [message length exceeded] "); + } +} -#define debug_log_cont(level, msg, ...) \ - do { \ - if (DEBUG_CHANNEL_ENABLED(level)) { \ - char __swo_buffer[MAX_MESSAGE_LENGTH]; \ - size_t len = \ - snprintf(__swo_buffer, sizeof(__swo_buffer), msg, ##__VA_ARGS__); \ - __swo_print(level, __swo_buffer); \ - if (len >= sizeof(__swo_buffer)) { \ - __swo_print(level, " [message length exceeded] "); \ - } \ - } \ - } while (0) +[[maybe_unused, gnu::format(printf, 2, 3)]] +static inline void debug_log_cont(unsigned int level, const char *msg, ...) { + if (!DEBUG_CHANNEL_ENABLED(level)) { + return; + } + + char __swo_buffer[MAX_MESSAGE_LENGTH]; + va_list args; + va_start(args, msg); + size_t len = vsnprintf(__swo_buffer, sizeof(__swo_buffer), msg, args); + va_end(args); + + __swo_print(level, __swo_buffer); + + if (len >= sizeof(__swo_buffer)) { + __swo_print(level, " [message length exceeded] "); + } +} #endif /* __SWO_LOG_H */