Files
ASER/Core/Src/freertos.c
2026-03-31 23:30:33 +08:00

302 lines
8.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* USER CODE BEGIN Header */
/**
******************************************************************************
* File Name : freertos.c
* Description : Code for freertos applications
******************************************************************************
* @attention
*
* Copyright (c) 2026 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "app_tasks.h"
#include "snc_can_app.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */
/* 导航控制任务 (动态创建,不经 CubeMX 管理) */
static osThreadId_t navTaskHandle;
static const osThreadAttr_t navTask_attributes = {
.name = "navTask",
.stack_size = 1024 * 4,
.priority = (osPriority_t) osPriorityAboveNormal,
};
/* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
/* Definitions for canTxTask */
osThreadId_t canTxTaskHandle;
const osThreadAttr_t canTxTask_attributes = {
.name = "canTxTask",
.stack_size = 512 * 4,
.priority = (osPriority_t) osPriorityAboveNormal,
};
/* Definitions for monitorTask */
osThreadId_t monitorTaskHandle;
const osThreadAttr_t monitorTask_attributes = {
.name = "monitorTask",
.stack_size = 1024 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
/* Definitions for laserTestTask */
osThreadId_t laserTestTaskHandle;
const osThreadAttr_t laserTestTask_attributes = {
.name = "laserTestTask",
.stack_size = 4096 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
/* Definitions for vl53Task */
osThreadId_t vl53TaskHandle;
const osThreadAttr_t vl53Task_attributes = {
.name = "vl53Task",
.stack_size = 1024 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
/* Definitions for imuTask */
osThreadId_t imuTaskHandle;
const osThreadAttr_t imuTask_attributes = {
.name = "imuTask",
.stack_size = 512 * 4,
.priority = (osPriority_t) osPriorityBelowNormal,
};
/* Definitions for logMutex */
osMutexId_t logMutexHandle;
const osMutexAttr_t logMutex_attributes = {
.name = "logMutex"
};
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
/* USER CODE END FunctionPrototypes */
void StartDefaultTask(void *argument);
void StartCanTxTask(void *argument);
void StartMonitorTask(void *argument);
void AppTasks_RunLaserTestTask(void *argument);
void StartVl53Task(void *argument);
void StartImuTask(void *argument);
extern void MX_USB_DEVICE_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/**
* @brief FreeRTOS initialization
* @param None
* @retval None
*/
void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN Init */
AppTasks_Init();
/* USER CODE END Init */
/* Create the mutex(es) */
/* creation of logMutex */
logMutexHandle = osMutexNew(&logMutex_attributes);
/* USER CODE BEGIN RTOS_MUTEX */
/* add mutexes, ... */
/* USER CODE END RTOS_MUTEX */
/* USER CODE BEGIN RTOS_SEMAPHORES */
/* add semaphores, ... */
/* USER CODE END RTOS_SEMAPHORES */
/* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */
/* USER CODE END RTOS_TIMERS */
/* USER CODE BEGIN RTOS_QUEUES */
/* add queues, ... */
/* USER CODE END RTOS_QUEUES */
/* Create the thread(s) */
/* creation of defaultTask */
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
/* creation of canTxTask */
canTxTaskHandle = osThreadNew(StartCanTxTask, NULL, &canTxTask_attributes);
/* creation of monitorTask */
monitorTaskHandle = osThreadNew(StartMonitorTask, NULL, &monitorTask_attributes);
/* creation of laserTestTask */
laserTestTaskHandle = osThreadNew(AppTasks_RunLaserTestTask, NULL, &laserTestTask_attributes);
/* creation of vl53Task */
vl53TaskHandle = osThreadNew(StartVl53Task, NULL, &vl53Task_attributes);
/* creation of imuTask */
imuTaskHandle = osThreadNew(StartImuTask, NULL, &imuTask_attributes);
/* USER CODE BEGIN RTOS_THREADS */
/* 动态孵化导航控制任务,不需要在 CubeMX 中添加 */
navTaskHandle = osThreadNew(AppTasks_RunNavTask_Impl, NULL, &navTask_attributes);
/* USER CODE END RTOS_THREADS */
/* USER CODE BEGIN RTOS_EVENTS */
/* add events, ... */
/* USER CODE END RTOS_EVENTS */
}
/* USER CODE BEGIN Header_StartDefaultTask */
/**
* @brief Function implementing the defaultTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* init code for USB_DEVICE */
MX_USB_DEVICE_Init();
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
osDelay(1);
}
/* USER CODE END StartDefaultTask */
}
/* USER CODE BEGIN Header_StartCanTxTask */
/**
* @brief Function implementing the canTxTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartCanTxTask */
void StartCanTxTask(void *argument)
{
/* USER CODE BEGIN StartCanTxTask */
/*
* 保持 CubeMX 生成的任务壳不变:
* 20ms 发送节拍与具体业务逻辑统一放在 app_tasks.c 中维护,
* 降低后续重新生成代码时的冲突风险。
*/
AppTasks_RunCanTxTask(argument);
/* USER CODE END StartCanTxTask */
}
/* USER CODE BEGIN Header_StartMonitorTask */
/**
* @brief Function implementing the monitorTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartMonitorTask */
void StartMonitorTask(void *argument)
{
/* USER CODE BEGIN StartMonitorTask */
/*
* 保持 CubeMX 生成的任务壳不变:
* 100ms 监控任务逻辑下沉到 app_tasks.c
* 这里仅做入口转发,便于与自动生成框架解耦。
*/
AppTasks_RunMonitorTask(argument);
// (void)argument;
// for (;;)
// {
// osDelay(1000);
// }
/* USER CODE END StartMonitorTask */
}
/* USER CODE BEGIN Header_AppTasks_RunLaserTestTask */
/**
* @brief Function implementing the laserTestTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_AppTasks_RunLaserTestTask */
void AppTasks_RunLaserTestTask(void *argument)
{
/* USER CODE BEGIN AppTasks_RunLaserTestTask */
/* Infinite loop */
// AppTasks_RunLaserTestTask_Impl(argument);
AppTasks_RunLaserTestTask_Impl(argument);
// (void)argument;
// for (;;)
// {
// osDelay(1000);
// }
/* USER CODE END AppTasks_RunLaserTestTask */
}
/* USER CODE BEGIN Header_StartVl53Task */
/**
* @brief Function implementing the vl53Task thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartVl53Task */
void StartVl53Task(void *argument)
{
/* USER CODE BEGIN StartVl53Task */
/* Infinite loop */
AppTasks_RunVl53Task_Impl(argument);
/* USER CODE END StartVl53Task */
}
/* USER CODE BEGIN Header_StartImuTask */
/**
* @brief Function implementing the imuTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartImuTask */
void StartImuTask(void *argument)
{
/* USER CODE BEGIN StartImuTask */
/* Infinite loop */
AppTasks_RunImuTask_Impl(argument);
/* USER CODE END StartImuTask */
}
/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
/* USER CODE END Application */