Files
TCP2UART/Core/Src/debug_log.c
T

105 lines
2.2 KiB
C

#include "debug_log.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "FreeRTOS.h"
#include "SEGGER_RTT.h"
#include "task.h"
volatile uint32_t g_rtt_log_seq = 0u;
volatile uint32_t g_rtt_log_drop_count = 0u;
volatile uint32_t g_rtt_log_last_drop_seq = 0u;
static void debug_backend_write(const char *msg)
{
unsigned len;
unsigned written;
if ((msg == NULL) || (msg[0] == '\0')) {
return;
}
len = (unsigned)strlen(msg);
g_rtt_log_seq += 1u;
written = SEGGER_RTT_Write(0u, msg, len);
if (written < len) {
g_rtt_log_drop_count += 1u;
g_rtt_log_last_drop_seq = g_rtt_log_seq;
}
}
void debug_log_init(void)
{
SEGGER_RTT_Init();
}
void debug_log_write(const char *msg)
{
if (msg == NULL) {
return;
}
debug_backend_write(msg);
}
void debug_log_printf(const char *fmt, ...)
{
char buffer[128];
va_list args;
int len;
if (fmt == NULL) {
return;
}
va_start(args, fmt);
len = vsnprintf(buffer, sizeof(buffer), fmt, args);
va_end(args);
if (len < 0) {
return;
}
buffer[sizeof(buffer) - 1u] = '\0';
debug_backend_write(buffer);
}
void debug_log_boot(const char *tag)
{
debug_log_printf("[BOOT] %s\r\n", (tag != NULL) ? tag : "(null)");
}
void debug_log_fault(const char *tag)
{
debug_log_printf("[FAULT] %s\r\n", (tag != NULL) ? tag : "(null)");
}
void debug_log_runtime_snapshot(void)
{
UBaseType_t default_hwm;
size_t free_heap;
size_t min_heap;
free_heap = xPortGetFreeHeapSize();
min_heap = xPortGetMinimumEverFreeHeapSize();
default_hwm = uxTaskGetStackHighWaterMark(NULL);
debug_log_printf("[RTOS] free=%lu min=%lu self_hwm=%lu\r\n",
(unsigned long)free_heap,
(unsigned long)min_heap,
(unsigned long)default_hwm);
}
void lwip_platform_assert(const char *msg, const char *file, int line)
{
debug_log_printf("[FAULT] lwip-assert msg=%s file=%s line=%d\r\n",
(msg != NULL) ? msg : "(null)",
(file != NULL) ? file : "(null)",
line);
taskDISABLE_INTERRUPTS();
while (1) {
}
}