aboutsummaryrefslogtreecommitdiff
path: root/book/en/src/by-example/app_task.md
blob: b2731f62a000b737a9f1633e672e0c7a0685b851 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- Should probably be removed -->

# Defining tasks with `#[task]`

Tasks, defined with `#[task]`, are the main mechanism of getting work done in RTIC.

Tasks can

* Be spawned (now or in the future, also by themselves)
* Receive messages (passing messages between tasks)
* Be prioritized, allowing preemptive multitasking
* Optionally bind to a hardware interrupt

RTIC makes a distinction between “software tasks” and “hardware tasks”.

*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. 

In the coming pages we will explore both tasks and the different options available.