From 926e5dbbc35d0c7091857b16dd8901f533d8c61b Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Thu, 16 Apr 2026 18:16:22 +0300 Subject: [PATCH 1/3] Issue #25: Increase ULog queue capacity to hold enough packets during startup --- KPI_Rover/Logger/ul_ulog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KPI_Rover/Logger/ul_ulog.c b/KPI_Rover/Logger/ul_ulog.c index ae4c47d..24696ab 100644 --- a/KPI_Rover/Logger/ul_ulog.c +++ b/KPI_Rover/Logger/ul_ulog.c @@ -36,7 +36,7 @@ #include #include -#define LOG_QUEUE_LENGTH 10 +#define LOG_QUEUE_LENGTH 20 #define MAX_LOG_MESSAGE_SIZE 256 static void ulogTask(void *argument); From 1b5a0ae5ac9c9104eba285d45a4dee4784085248 Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Thu, 16 Apr 2026 18:17:23 +0300 Subject: [PATCH 2/3] Issue #25: Code style fix --- KPI_Rover/Logger/ul_ulog.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/KPI_Rover/Logger/ul_ulog.c b/KPI_Rover/Logger/ul_ulog.c index 24696ab..8f79152 100644 --- a/KPI_Rover/Logger/ul_ulog.c +++ b/KPI_Rover/Logger/ul_ulog.c @@ -59,8 +59,7 @@ static const osThreadAttr_t ulogTask_attributes = { void ul_ulog_init() -{ - +{ xULogQueue = xQueueCreateStatic(LOG_QUEUE_LENGTH, MAX_LOG_MESSAGE_SIZE, ucUlogQueueStorage, &xUlogQueueBuffer); if (xULogQueue == NULL) From ed31013867f641d1816aeb0032d1b735b9c43ac7 Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Thu, 16 Apr 2026 18:19:46 +0300 Subject: [PATCH 3/3] Issue #25: Move ULog message buffer to static storage to reduce stack usage --- KPI_Rover/Logger/ul_ulog.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/KPI_Rover/Logger/ul_ulog.c b/KPI_Rover/Logger/ul_ulog.c index 8f79152..0e5db41 100644 --- a/KPI_Rover/Logger/ul_ulog.c +++ b/KPI_Rover/Logger/ul_ulog.c @@ -51,6 +51,10 @@ osEventFlagsId_t ulogFlags; #define ULOG_CDC_TRANSMIT_FINISH_FLAG 0x1 #define ULOG_DEV_CONNECTED_WAKEUP_FLAG 0x2 +static StaticSemaphore_t ulUlog_mutex_storage; +#define ULOG_LOCK() osMutexAcquire(&ulUlog_mutex_storage, osWaitForever) +#define ULOG_UNLOCK() osMutexRelease(&ulUlog_mutex_storage) + static const osThreadAttr_t ulogTask_attributes = { .name = "ulogTask", .stack_size = 128 * 4, @@ -75,16 +79,21 @@ void ul_ulog_init() ulogFlags = osEventFlagsNew(NULL); ulogUsbIsEstablished = 0; + + { + const static osMutexAttr_t mutex_attrs = {NULL, 0, &ulUlog_mutex_storage, sizeof(ulUlog_mutex_storage)}; + (void) osMutexNew(&mutex_attrs); + } } -void ul_ulog_send(ulog_level_t level, const char *filename, char *msg) +static inline void ul_ulog_send_critical(ulog_level_t level, const char *filename, char *msg) { if (xULogQueue == NULL || msg == NULL) { return; } - char logBuffer[MAX_LOG_MESSAGE_SIZE]; + static char logBuffer[MAX_LOG_MESSAGE_SIZE]; int len; size_t msg_len = strlen(msg); @@ -135,11 +144,18 @@ void ul_ulog_send(ulog_level_t level, const char *filename, char *msg) } } +void ul_ulog_send(ulog_level_t level, const char *filename, char *msg) +{ + ULOG_LOCK(); + ul_ulog_send_critical(level, filename, msg); + ULOG_UNLOCK(); +} + static void ulogTask(void *argument) { for (;;) { - char logMessage[MAX_LOG_MESSAGE_SIZE]; + static char logMessage[MAX_LOG_MESSAGE_SIZE]; BaseType_t result = xQueueReceive(xULogQueue, logMessage, portMAX_DELAY); if (result == pdTRUE)