20#include <idfxx/chrono>
23#include <idfxx/memory>
26#include <freertos/FreeRTOS.h>
27#include <freertos/task.h>
135 template<
typename Clock,
typename Duration>
139 return _take(0) != 0;
192 template<
typename Clock,
typename Duration>
250 std::string_view
name =
"task";
251 size_t stack_size = 4096;
253 std::optional<core_id> core_affinity = std::nullopt;
371#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
427#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
480#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
500#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
529#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
581#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
608 template<
typename Rep,
typename Period>
625 template<
typename Clock,
typename Duration>
658 template<
typename Rep,
typename Period>
677 template<
typename Clock,
typename Duration>
705 static void trampoline(
void*
arg);
Handle for task self-interaction.
task_priority priority() const noexcept
Returns the current task priority.
bool wait_for(const std::chrono::duration< Rep, Period > &timeout) noexcept
Waits for a notification with a timeout (binary semaphore pattern).
bool wait_until(const std::chrono::time_point< Clock, Duration > &deadline) noexcept
Waits for a notification until a deadline (binary semaphore pattern).
bool stop_requested() const noexcept
Checks if a stop has been requested for this task.
void set_priority(task_priority new_priority) noexcept
Changes the current task priority.
uint32_t take_for(const std::chrono::duration< Rep, Period > &timeout) noexcept
Takes accumulated notifications with a timeout (counting semaphore pattern).
uint32_t take_until(const std::chrono::time_point< Clock, Duration > &deadline) noexcept
Takes accumulated notifications until a deadline (counting semaphore pattern).
self(const self &)=delete
TaskHandle_t idf_handle() const noexcept
Returns the FreeRTOS handle of the current task.
bool is_detached() const noexcept
Checks if the current task has been detached.
self & operator=(const self &)=delete
uint32_t take() noexcept
Takes accumulated notifications (counting semaphore pattern).
void wait() noexcept
Waits for a notification (binary semaphore pattern).
size_t stack_high_water_mark() const noexcept
Returns the minimum free stack space (in bytes) since the task started.
std::string name() const
Returns the current task name.
void suspend() noexcept
Suspends the current task.
Type-safe wrapper for FreeRTOS task priority values.
Task lifecycle management.
result< void > try_resume()
Resumes a suspended task.
void join(const std::chrono::duration< Rep, Period > &timeout)
Blocks until the task function completes or the timeout expires.
static TaskHandle_t current_handle() noexcept
Returns the handle of the currently executing task.
void join()
Blocks until the task function completes.
result< void > try_detach()
Releases ownership of the task.
void notify()
Sends a notification to the task.
const std::string & name() const noexcept
Returns the task name.
bool notify_from_isr() noexcept
Sends a notification to the task from ISR context.
void resume()
Resumes a suspended task.
result< void > try_join()
Blocks until the task function completes.
task_priority priority() const noexcept
Returns the current task priority.
task & operator=(const task &)=delete
void detach()
Releases ownership of the task.
void suspend()
Suspends the task.
result< void > try_kill()
Immediately terminates the task without waiting for completion.
result< void > try_join_until(const std::chrono::time_point< Clock, Duration > &deadline)
Blocks until the task function completes or the deadline is reached.
static void spawn(config cfg, std::move_only_function< void(self &)> task_func)
Creates a fire-and-forget task with a std::move_only_function callback.
task(const task &)=delete
void kill()
Immediately terminates the task without waiting for completion.
task(task &&other) noexcept
result< void > try_notify()
Sends a notification to the task.
static std::string current_name()
Returns the name of the currently executing task.
result< void > try_join(const std::chrono::duration< Rep, Period > &timeout)
Blocks until the task function completes or the timeout expires.
bool is_completed() const noexcept
Checks if the task function has returned.
bool joinable() const noexcept
Checks if this task object owns the task.
result< void > try_set_priority(task_priority new_priority)
Changes the task priority.
~task()
Destroys the task, requesting stop and blocking until the task function completes.
bool request_stop() noexcept
Requests the task to stop.
void set_priority(task_priority new_priority)
Changes the task priority.
bool resume_from_isr() noexcept
Resumes a suspended task from ISR context.
result< void > try_suspend()
Suspends the task.
TaskHandle_t idf_handle() const noexcept
Returns the underlying FreeRTOS task handle.
task(const config &cfg, std::move_only_function< void(self &)> task_func)
Creates a task with a std::move_only_function callback.
task & operator=(task &&other) noexcept
void join_until(const std::chrono::time_point< Clock, Duration > &deadline)
Blocks until the task function completes or the deadline is reached.
constexpr TickType_t ticks(const std::chrono::duration< Rep, Period > &d)
Converts a std::chrono duration to TickType_t ticks.
@ dram
Internal DRAM (8-bit accessible)
T unwrap(result< T > result)
Throws a std::system_error if the result is an error.
@ timeout
Operation timed out.
std::expected< T, std::error_code > result
result type wrapping a value or error code.
Task configuration parameters.