Fix buffer overwrite while DMA is not completed

This commit is contained in:
2026-06-18 13:08:11 +02:00
parent 3bf5a8cc19
commit 9086bf3efb
+15 -11
View File
@@ -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 */