2023-05-03 14:01:32 +03:00
|
|
|
|
/*
|
|
|
|
|
|
* task.hpp
|
|
|
|
|
|
*
|
2024-02-21 10:41:56 +03:00
|
|
|
|
* Created on: 6 мар. 2023 г.
|
2023-05-03 14:01:32 +03:00
|
|
|
|
* Author: sychev
|
2024-02-21 10:41:56 +03:00
|
|
|
|
* Во FreeRtos есть два способа создать задачу:
|
|
|
|
|
|
* xTaskCreate - стэк выделяется динамически при создании задачи
|
|
|
|
|
|
* xTaskCreateStatic - стек выделяется статически
|
|
|
|
|
|
* Данный модуль реализован на основе xTaskCreate
|
2023-05-03 14:01:32 +03:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef FREE_RTOS_TASK_TASK_HPP_
|
|
|
|
|
|
#define FREE_RTOS_TASK_TASK_HPP_
|
|
|
|
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
|
|
#include "FreeRTOS.h"
|
|
|
|
|
|
#include "task.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace free_rtos {
|
|
|
|
|
|
/**
|
2024-02-21 10:41:56 +03:00
|
|
|
|
* @brief Класс обертка реализующий создание задачи во free_rtos.
|
2023-05-03 14:01:32 +03:00
|
|
|
|
*/
|
|
|
|
|
|
class Task {
|
|
|
|
|
|
public:
|
|
|
|
|
|
/**
|
2024-02-21 10:41:56 +03:00
|
|
|
|
* @brief Тип указателя на функцию задачи
|
2023-05-03 14:01:32 +03:00
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
using TaskFunction = TaskFunction_t;
|
|
|
|
|
|
|
|
|
|
|
|
static const uint32_t TaskPriorityHiest = configMAX_PRIORITIES - 1; // 31
|
|
|
|
|
|
static const uint32_t TaskPriorityLowest = 0; // 0
|
|
|
|
|
|
|
|
|
|
|
|
bool Create(std::string name, uint32_t priority, TaskFunction task_fun,
|
|
|
|
|
|
void * taskArg, int32_t stack_size_bytes = -1);
|
|
|
|
|
|
|
|
|
|
|
|
~Task() {
|
|
|
|
|
|
vTaskDelete(taskHandle_);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
2024-02-21 10:41:56 +03:00
|
|
|
|
static const uint32_t defStackSize_ = 8192; /// Размер стека по-умолчанию
|
2023-05-03 14:01:32 +03:00
|
|
|
|
|
|
|
|
|
|
TaskHandle_t taskHandle_;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* FREE_RTOS_TASK_TASK_HPP_ */
|