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; CanMessage_t message;
char tx_buffer[45]; 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"); osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever);
if (osMessageQueueGet(xUARTQueue, &message, NULL, osWaitForever) == osOK) 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"); DEBUG_PRINT("CAN frame sent via UART\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) else
{ {
osSemaphoreAcquire(xUARTDMASemaphore, osWaitForever); osSemaphoreRelease(xUARTDMASemaphore);
DEBUG_PRINT("CAN frame sent via UART\r\n"); DEBUG_PRINT("HAL error, CAN frame NOT sent!\r\n");
}
else DEBUG_PRINT("HAL error, CAN frame NOT sent!\r\n");
} }
} }
}
} }
/* END vUARTLoggerListen */ /* END vUARTLoggerListen */