Initialize UART task and semaphore and CAN event flags

This commit is contained in:
2026-06-16 19:10:53 +02:00
parent cedd6cc0f8
commit 76628dec90
2 changed files with 31 additions and 10 deletions
+8 -2
View File
@@ -24,8 +24,10 @@
extern CAN_HandleTypeDef hcan1;
extern CAN_HandleTypeDef hcan2;
extern osThreadId_t xLedTaskCAN1;
extern osThreadId_t xLedTaskCAN2;
extern osThreadId_t xCAN1LedTask;
extern osThreadId_t xCAN2LedTask;
extern osEventFlagsId_t xCanEventFlags;
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
@@ -71,6 +73,10 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
CAN_RxHeaderTypeDef rxHeader;
uint8_t data[8];
osMessageQueueId_t queue;
uint32_t flag;
osThreadId_t led_task;
// TODO: manage the case of FIFO overflow
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rxHeader, data) != HAL_OK) return;
+23 -8
View File
@@ -53,6 +53,10 @@ LED_Config led_error = {GPIOB, GPIO_PIN_3};
osMessageQueueId_t xCAN1RxQueue;
osMessageQueueId_t xCAN2RxQueue;
osEventFlagsId_t xCanEventFlags;
osSemaphoreId_t xUARTDMASemaphore;
osThreadId_t xUartTask;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@@ -114,28 +118,34 @@ int main(void)
osKernelInitialize();
/* USER CODE BEGIN RTOS_TASKS */
osThreadId_t xCAN1rx;
osThreadId_t xCAN1rxTask;
const osThreadAttr_t CAN1rxAttributes = {
.name = "CAN1rx",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityRealtime1,
};
osThreadId_t xCAN2rx;
osThreadId_t xCAN2rxTask;
const osThreadAttr_t CAN2rxAttributes = {
.name = "CAN2rx",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityRealtime,
};
osThreadId_t xLedTaskCAN1;
const osThreadAttr_t UartLoggerAttributes = {
.name = "UART_Logger",
.stack_size = 256 * 4,
.priority = (osPriority_t) osPriorityVeryHigh,
};
osThreadId_t xCAN1LedTask;
const osThreadAttr_t LEDHeartbeatCAN1Attributes = {
.name = "LED_HB_CAN1",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityVeryLow1,
};
osThreadId_t xLedTaskCAN2;
osThreadId_t xCAN2LedTask;
const osThreadAttr_t LEDHeartbeatCAN2Attributes = {
.name = "LED_HB_CAN2",
.stack_size = 128 * 4,
@@ -147,6 +157,8 @@ int main(void)
/* USER CODE END RTOS_MUTEX */
/* USER CODE BEGIN RTOS_SEMAPHORES */
xUARTDMASemaphore = osSemaphoreNew(1, 0, NULL);
if (xUARTDMASemaphore == NULL) Error_Handler();
/* USER CODE END RTOS_SEMAPHORES */
/* USER CODE BEGIN RTOS_TIMERS */
@@ -160,13 +172,16 @@ int main(void)
/* USER CODE END RTOS_QUEUES */
/* USER CODE BEGIN RTOS_THREADS */
xCAN1rx = osThreadNew(vCANLoggerListen, &hcan1, &CAN1rxAttributes);
xCAN2rx = osThreadNew(vCANLoggerListen, &hcan2, &CAN2rxAttributes);
xLedTaskCAN1 = osThreadNew(vLEDHeartbeat, &led_can1, &LEDHeartbeatCAN1Attributes);
xLedTaskCAN2 = osThreadNew(vLEDHeartbeat, &led_can2, &LEDHeartbeatCAN2Attributes);
xCAN1rxTask = osThreadNew(vCANLoggerListen, &hcan1, &CAN1rxAttributes);
xCAN2rxTask = osThreadNew(vCANLoggerListen, &hcan2, &CAN2rxAttributes);
xUartTask = osThreadNew(vUARTLogger, NULL, &UartLoggerAttributes);
xCAN1LedTask = osThreadNew(vLEDHeartbeat, &led_can1, &LEDHeartbeatCAN1Attributes);
xCAN2LedTask = osThreadNew(vLEDHeartbeat, &led_can2, &LEDHeartbeatCAN2Attributes);
/* USER CODE END RTOS_THREADS */
/* USER CODE BEGIN RTOS_EVENTS */
xCanEventFlags = osEventFlagsNew(NULL);
if (xCanEventFlags == NULL) Error_Handler();
/* USER CODE END RTOS_EVENTS */
/* Start scheduler */