From 9086bf3efb4476223a072aa19320975ced7fb04f Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Thu, 18 Jun 2026 13:08:11 +0200 Subject: [PATCH] Fix buffer overwrite while DMA is not completed --- Core/Src/cansend.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/Core/Src/cansend.c b/Core/Src/cansend.c index 2a68903..061bcd0 100644 --- a/Core/Src/cansend.c +++ b/Core/Src/cansend.c @@ -104,20 +104,24 @@ void vUARTLogger(void *argument) CanMessage_t message; char tx_buffer[45]; - for (;;) + for (;;) + { + DEBUG_PRINT("Waiting for CAN traffic...\r\n"); + if (osMessageQueueGet(xUARTQueue, &message, NULL, osWaitForever) == osOK) { - DEBUG_PRINT("Waiting for CAN traffic...\r\n"); - if (osMessageQueueGet(xUARTQueue, &message, NULL, osWaitForever) == osOK) + osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever); + int len = format_can_message(tx_buffer, message.source, &message); + + if (HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, len) == HAL_OK) { - DEBUG_PRINT("CAN frame detected\r\n"); - int len = format_can_message(tx_buffer, message.source, &message); - if (HAL_UART_Transmit_DMA(&huart1, (uint8_t*)tx_buffer, len) == HAL_OK) - { - osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever); - DEBUG_PRINT("CAN frame sent via UART\r\n"); - } - else DEBUG_PRINT("HAL error, CAN frame NOT sent!\r\n"); + DEBUG_PRINT("CAN frame sent via UART\r\n"); + } + else + { + osSemaphoreRelease(xUARTDMASemaphore); + DEBUG_PRINT("HAL error, CAN frame NOT sent!\r\n"); } } + } } /* END vUARTLoggerListen */