2021-09-22 13:22:45 +02:00
|
|
|
# Defining tasks with `#[task]`
|
|
|
|
|
2021-12-14 22:46:15 +01:00
|
|
|
Tasks, defined with `#[task]`, are the main mechanism of getting work done in RTIC.
|
2021-09-22 13:22:45 +02:00
|
|
|
|
2021-12-14 22:46:15 +01:00
|
|
|
Tasks can
|
|
|
|
|
2022-02-20 19:21:25 +01:00
|
|
|
* Be spawned (now or in the future, also by themselves)
|
|
|
|
* Receive messages (passing messages between tasks)
|
|
|
|
* Be prioritized, allowing preemptive multitasking
|
2021-12-14 22:46:15 +01:00
|
|
|
* Optionally bind to a hardware interrupt
|
|
|
|
|
|
|
|
RTIC makes a distinction between “software tasks” and “hardware tasks”.
|
|
|
|
|
2022-02-20 19:21:25 +01:00
|
|
|
*Hardware tasks* are tasks that are bound to a specific interrupt vector in the MCU while software tasks are not.
|
|
|
|
|
|
|
|
This means that if a hardware task is bound to, lets say, a UART RX interrupt, the task will be run every
|
|
|
|
time that interrupt triggers, usually when a character is received.
|
|
|
|
|
|
|
|
*Software tasks* are explicitly spawned in a task, either immediately or using the Monotonic timer mechanism.
|
2021-09-22 13:22:45 +02:00
|
|
|
|
|
|
|
In the coming pages we will explore both tasks and the different options available.
|