refactor: convert log macros to functions

reduces program size by ~1/3rd
33k -> 19k
This commit is contained in:
Kilian Bracher 2025-03-31 19:51:59 +02:00
parent 6145508e8b
commit 11a2121fd8
Signed by: k.bracher
SSH Key Fingerprint: SHA256:mXpyZkK7RDiJ7qeHCKJX108woM0cl5TrCvNBJASu6lM

View File

@ -93,8 +93,7 @@ static inline void __swo_print(unsigned int channel, const char *str) {
} }
} }
[[maybe_unused]] static inline void debug_clear_console() {
static void debug_clear_console() {
for (int i = 0; i < LOG_LEVEL_NOISY; i++) { for (int i = 0; i < LOG_LEVEL_NOISY; i++) {
#if USE_ANSI_ESCAPE_CODES #if USE_ANSI_ESCAPE_CODES
__swo_print(i, "\033[2J\033[;H"); // clear screen __swo_print(i, "\033[2J\033[;H"); // clear screen
@ -104,44 +103,58 @@ static void debug_clear_console() {
} }
} }
#define debug_log(level, msg, ...) \ [[gnu::format(printf, 2, 3)]]
do { \ static inline void debug_log(unsigned int level, const char *msg, ...) {
if (DEBUG_CHANNEL_ENABLED(level)) { \ if (!DEBUG_CHANNEL_ENABLED(level)) {
char __swo_buffer[MAX_MESSAGE_LENGTH]; \ return;
size_t len = \ }
snprintf(__swo_buffer, sizeof(__swo_buffer), msg, ##__VA_ARGS__); \
__swo_putc('\n', level); \ char __swo_buffer[MAX_MESSAGE_LENGTH];
/* Print timestamp if enabled */ \ va_list args;
if (PRINT_TIMESTAMP) { \ va_start(args, msg);
char __time_buffer[16]; \ size_t len = vsnprintf(__swo_buffer, sizeof(__swo_buffer), msg, args);
if (USE_ANSI_ESCAPE_CODES) { \ va_end(args);
snprintf(__time_buffer, sizeof(__time_buffer), \
"\033[90m[%lu]\033[0m ", HAL_GetTick()); \ __swo_putc('\n', level);
} else { \
snprintf(__time_buffer, sizeof(__time_buffer), "[%lu] ", \ /* Print timestamp if enabled */
HAL_GetTick()); \ if (PRINT_TIMESTAMP) {
} \ char __time_buffer[16];
__swo_print(level, __time_buffer); \ if (USE_ANSI_ESCAPE_CODES) {
} \ snprintf(__time_buffer, sizeof(__time_buffer),
__swo_print(level, log_level_names[level]); \ "\033[90m[%lu]\033[0m ", HAL_GetTick());
__swo_print(level, __swo_buffer); \ } else {
if (len >= sizeof(__swo_buffer)) { \ snprintf(__time_buffer, sizeof(__time_buffer), "[%lu] ",
__swo_print(level, " [message length exceeded] "); \ HAL_GetTick());
} \ }
} \ __swo_print(level, __time_buffer);
} while (0) }
__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, ...) \ [[gnu::format(printf, 2, 3)]]
do { \ static inline void debug_log_cont(unsigned int level, const char *msg, ...) {
if (DEBUG_CHANNEL_ENABLED(level)) { \ if (!DEBUG_CHANNEL_ENABLED(level)) {
char __swo_buffer[MAX_MESSAGE_LENGTH]; \ return;
size_t len = \ }
snprintf(__swo_buffer, sizeof(__swo_buffer), msg, ##__VA_ARGS__); \
__swo_print(level, __swo_buffer); \ char __swo_buffer[MAX_MESSAGE_LENGTH];
if (len >= sizeof(__swo_buffer)) { \ va_list args;
__swo_print(level, " [message length exceeded] "); \ va_start(args, msg);
} \ size_t len = vsnprintf(__swo_buffer, sizeof(__swo_buffer), msg, args);
} \ va_end(args);
} while (0)
__swo_print(level, __swo_buffer);
if (len >= sizeof(__swo_buffer)) {
__swo_print(level, " [message length exceeded] ");
}
}
#endif /* __SWO_LOG_H */ #endif /* __SWO_LOG_H */