From ac5d9f6a72c3b3990573da7b63357fe13d06c023 Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Tue, 16 Jun 2026 19:11:38 +0200 Subject: [PATCH] Set CAN event flag and LED thread flag in ISR - This is efficient specifically for STM32F4x with Thumb-2 IT block optimization enabled (-02 or -03) --- Core/Src/canlog.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Core/Src/canlog.c b/Core/Src/canlog.c index 64869ce..897a36d 100644 --- a/Core/Src/canlog.c +++ b/Core/Src/canlog.c @@ -85,11 +85,23 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) message.isExtended = (rxHeader.IDE == CAN_ID_EXT); memcpy(message.payload, data, rxHeader.DLC); - osMessageQueueId_t queue = (hcan->Instance == CAN1) ? xCAN1RxQueue : xCAN2RxQueue; + if (hcan->Instance == CAN1) + { + queue = xCAN1RxQueue; + flag = 0x01; + led_task = xCAN1LedTask; + } + else + { + queue = xCAN2RxQueue; + flag = 0x02; + led_task = xCAN2LedTask; + } + if (osMessageQueuePut(queue, &message, 0U, 0U) == osOK) { - if (hcan->Instance == CAN1) osThreadFlagsSet(xLedTaskCAN1, 0x01); - else osThreadFlagsSet(xLedTaskCAN2, 0x01); + osEventFlagsSet(xCanEventFlags, flag); + osThreadFlagsSet(led_task, 0x01); } else { @@ -120,7 +132,7 @@ void vCANLoggerListen(void *argument) { if (osMessageQueueGet(queue, &message, NULL, osWaitForever) == osOK) { - // + } } /* CODE END */