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