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 hcan1;
extern CAN_HandleTypeDef hcan2; extern CAN_HandleTypeDef hcan2;
extern osThreadId_t xLedTaskCAN1; extern osThreadId_t xCAN1LedTask;
extern osThreadId_t xLedTaskCAN2; extern osThreadId_t xCAN2LedTask;
extern osEventFlagsId_t xCanEventFlags;
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */ /* USER CODE BEGIN FunctionPrototypes */
@@ -71,6 +73,10 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
CAN_RxHeaderTypeDef rxHeader; CAN_RxHeaderTypeDef rxHeader;
uint8_t data[8]; uint8_t data[8];
osMessageQueueId_t queue;
uint32_t flag;
osThreadId_t led_task;
// TODO: manage the case of FIFO overflow // TODO: manage the case of FIFO overflow
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rxHeader, data) != HAL_OK) return; 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 xCAN1RxQueue;
osMessageQueueId_t xCAN2RxQueue; osMessageQueueId_t xCAN2RxQueue;
osEventFlagsId_t xCanEventFlags;
osSemaphoreId_t xUARTDMASemaphore;
osThreadId_t xUartTask;
/* USER CODE END PV */ /* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
@@ -114,28 +118,34 @@ int main(void)
osKernelInitialize(); osKernelInitialize();
/* USER CODE BEGIN RTOS_TASKS */ /* USER CODE BEGIN RTOS_TASKS */
osThreadId_t xCAN1rx; osThreadId_t xCAN1rxTask;
const osThreadAttr_t CAN1rxAttributes = { const osThreadAttr_t CAN1rxAttributes = {
.name = "CAN1rx", .name = "CAN1rx",
.stack_size = 128 * 4, .stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityRealtime1, .priority = (osPriority_t) osPriorityRealtime1,
}; };
osThreadId_t xCAN2rx; osThreadId_t xCAN2rxTask;
const osThreadAttr_t CAN2rxAttributes = { const osThreadAttr_t CAN2rxAttributes = {
.name = "CAN2rx", .name = "CAN2rx",
.stack_size = 128 * 4, .stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityRealtime, .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 = { const osThreadAttr_t LEDHeartbeatCAN1Attributes = {
.name = "LED_HB_CAN1", .name = "LED_HB_CAN1",
.stack_size = 128 * 4, .stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityVeryLow1, .priority = (osPriority_t) osPriorityVeryLow1,
}; };
osThreadId_t xLedTaskCAN2; osThreadId_t xCAN2LedTask;
const osThreadAttr_t LEDHeartbeatCAN2Attributes = { const osThreadAttr_t LEDHeartbeatCAN2Attributes = {
.name = "LED_HB_CAN2", .name = "LED_HB_CAN2",
.stack_size = 128 * 4, .stack_size = 128 * 4,
@@ -147,6 +157,8 @@ int main(void)
/* USER CODE END RTOS_MUTEX */ /* USER CODE END RTOS_MUTEX */
/* USER CODE BEGIN RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_SEMAPHORES */
xUARTDMASemaphore = osSemaphoreNew(1, 0, NULL);
if (xUARTDMASemaphore == NULL) Error_Handler();
/* USER CODE END RTOS_SEMAPHORES */ /* USER CODE END RTOS_SEMAPHORES */
/* USER CODE BEGIN RTOS_TIMERS */ /* USER CODE BEGIN RTOS_TIMERS */
@@ -160,13 +172,16 @@ int main(void)
/* USER CODE END RTOS_QUEUES */ /* USER CODE END RTOS_QUEUES */
/* USER CODE BEGIN RTOS_THREADS */ /* USER CODE BEGIN RTOS_THREADS */
xCAN1rx = osThreadNew(vCANLoggerListen, &hcan1, &CAN1rxAttributes); xCAN1rxTask = osThreadNew(vCANLoggerListen, &hcan1, &CAN1rxAttributes);
xCAN2rx = osThreadNew(vCANLoggerListen, &hcan2, &CAN2rxAttributes); xCAN2rxTask = osThreadNew(vCANLoggerListen, &hcan2, &CAN2rxAttributes);
xLedTaskCAN1 = osThreadNew(vLEDHeartbeat, &led_can1, &LEDHeartbeatCAN1Attributes); xUartTask = osThreadNew(vUARTLogger, NULL, &UartLoggerAttributes);
xLedTaskCAN2 = osThreadNew(vLEDHeartbeat, &led_can2, &LEDHeartbeatCAN2Attributes); xCAN1LedTask = osThreadNew(vLEDHeartbeat, &led_can1, &LEDHeartbeatCAN1Attributes);
xCAN2LedTask = osThreadNew(vLEDHeartbeat, &led_can2, &LEDHeartbeatCAN2Attributes);
/* USER CODE END RTOS_THREADS */ /* USER CODE END RTOS_THREADS */
/* USER CODE BEGIN RTOS_EVENTS */ /* USER CODE BEGIN RTOS_EVENTS */
xCanEventFlags = osEventFlagsNew(NULL);
if (xCanEventFlags == NULL) Error_Handler();
/* USER CODE END RTOS_EVENTS */ /* USER CODE END RTOS_EVENTS */
/* Start scheduler */ /* Start scheduler */