From 8b1b3b7ff314e0d27a0a878c9e422b5bba5ed59e Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Tue, 16 Jun 2026 19:49:13 +0200 Subject: [PATCH] Implement safe UART semaphore release inside ISR - It uses safe way to release semaphore - Yields in case task interrupted was of lower priority: UART has minimal latency --- Core/Src/cansend.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Core/Src/cansend.c b/Core/Src/cansend.c index 55ee5c2..354e43c 100644 --- a/Core/Src/cansend.c +++ b/Core/Src/cansend.c @@ -20,5 +20,17 @@ #include "cmsis_os.h" /* USER CODE END Includes */ -void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); -void vUARTLogger(void *argument); +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) +{ + if (huart->Instance == USART1) + { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + osSemaphoreReleaseFromISR(xUartDmaSem, &xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + } +} + +void vUARTLogger(void *argument) +{ + +}