From 7efb06407ffce21924780e99e1d05b86797f80db Mon Sep 17 00:00:00 2001 From: kkira Date: Thu, 18 Jun 2026 00:59:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- STM32_CO2_NODE/Core/Src/freertos.cpp | 195 +++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 STM32_CO2_NODE/Core/Src/freertos.cpp diff --git a/STM32_CO2_NODE/Core/Src/freertos.cpp b/STM32_CO2_NODE/Core/Src/freertos.cpp new file mode 100644 index 0000000..474823c --- /dev/null +++ b/STM32_CO2_NODE/Core/Src/freertos.cpp @@ -0,0 +1,195 @@ +/* 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 "queues.hpp" +#include "co2_data.hpp" +#include "co2_task.hpp" +#include "sd_task.hpp" +/* 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 */ + +/* USER CODE END Variables */ +/* Definitions for CO2Task */ +osThreadId_t CO2TaskHandle; +const osThreadAttr_t CO2Task_attributes = { + .name = "CO2Task", + .stack_size = 128 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; +/* Definitions for SDTask */ +osThreadId_t SDTaskHandle; +const osThreadAttr_t SDTask_attributes = { + .name = "SDTask", + .stack_size = 256 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; +/* Definitions for CANTask */ +osThreadId_t CANTaskHandle; +const osThreadAttr_t CANTask_attributes = { + .name = "CANTask", + .stack_size = 128 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN FunctionPrototypes */ + +/* USER CODE END FunctionPrototypes */ + +void StartCO2Task(void *argument); +void StartSDTask(void *argument); +void StartCANTask(void *argument); + +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 */ + + /* USER CODE END Init */ + + /* 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 */ +g_sdQueue = xQueueCreate(10, sizeof(CO2Data)); +g_canQueue = xQueueCreate(10, sizeof(CO2Data)); + +if (g_sdQueue == NULL || g_canQueue == NULL) +{ + Error_Handler(); +} + + /* add queues, ... */ + /* USER CODE END RTOS_QUEUES */ + + /* Create the thread(s) */ + /* creation of CO2Task */ + CO2TaskHandle = osThreadNew(StartCO2Task, NULL, &CO2Task_attributes); + + /* creation of SDTask */ + SDTaskHandle = osThreadNew(StartSDTask, NULL, &SDTask_attributes); + + /* creation of CANTask */ + CANTaskHandle = osThreadNew(StartCANTask, NULL, &CANTask_attributes); + + /* USER CODE BEGIN RTOS_THREADS */ + /* add threads, ... */ + /* USER CODE END RTOS_THREADS */ + + /* USER CODE BEGIN RTOS_EVENTS */ + /* add events, ... */ + /* USER CODE END RTOS_EVENTS */ + +} + +/* USER CODE BEGIN Header_StartCO2Task */ +/** + * @brief Function implementing the CO2Task thread. + * @param argument: Not used + * @retval None + */ +/* USER CODE END Header_StartCO2Task */ +void StartCO2Task(void *argument) +{ + /* USER CODE BEGIN StartCO2Task */ + /* Infinite loop */ + for(;;) + { + osDelay(1); + } + /* USER CODE END StartCO2Task */ +} + +/* USER CODE BEGIN Header_StartSDTask */ +/** +* @brief Function implementing the SDTask thread. +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_StartSDTask */ +void StartSDTask(void *argument) +{ + /* USER CODE BEGIN StartSDTask */ + /* Infinite loop */ + SDTask_Run(); + /* USER CODE END StartSDTask */ +} + +/* USER CODE BEGIN Header_StartCANTask */ +/** +* @brief Function implementing the CANTask thread. +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_StartCANTask */ +void StartCANTask(void *argument) +{ + /* USER CODE BEGIN StartCANTask */ + /* Infinite loop */ + for(;;) + { + osDelay(1); + } + /* USER CODE END StartCANTask */ +} + +/* Private application code --------------------------------------------------*/ +/* USER CODE BEGIN Application */ + +/* USER CODE END Application */ +