diff options
| author | Jorge Aparicio <jorge@japaric.io> | 2019-02-11 21:40:53 +0100 |
|---|---|---|
| committer | Jorge Aparicio <jorge@japaric.io> | 2019-02-11 21:40:53 +0100 |
| commit | 0007a35a274ab2d07eb937e41971ea5e2c1cb5ff (patch) | |
| tree | 98361d6d3dfced4b068771c31163b324573294b7 /book/src/by-example/tasks.md | |
| parent | 68a937a72a3a6d261076803d38b7d9b2cb9e3067 (diff) | |
change layout of books
Diffstat (limited to 'book/src/by-example/tasks.md')
| -rw-r--r-- | book/src/by-example/tasks.md | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/book/src/by-example/tasks.md b/book/src/by-example/tasks.md deleted file mode 100644 index b950f70..0000000 --- a/book/src/by-example/tasks.md +++ /dev/null @@ -1,63 +0,0 @@ -# Software tasks - -RTFM treats interrupt and exception handlers as *hardware* tasks. Hardware tasks -are invoked by the hardware in response to events, like pressing a button. RTFM -also supports *software* tasks which can be spawned by the software from any -execution context. - -Software tasks can also be assigned priorities and are dispatched from interrupt -handlers. RTFM requires that free interrupts are declared in an `extern` block -when using software tasks; these free interrupts will be used to dispatch the -software tasks. An advantage of software tasks over hardware tasks is that many -tasks can be mapped to a single interrupt handler. - -Software tasks are declared by applying the `task` attribute to functions. To be -able to spawn a software task the name of the task must appear in the `spawn` -argument of the context attribute (`init`, `idle`, `interrupt`, etc.). - -The example below showcases three software tasks that run at 2 different -priorities. The three tasks map to 2 interrupts handlers. - -``` rust -{{#include ../../../examples/task.rs}} -``` - -``` console -$ cargo run --example task -{{#include ../../../ci/expected/task.run}}``` - -## Message passing - -The other advantage of software tasks is that messages can be passed to these -tasks when spawning them. The type of the message payload must be specified in -the signature of the task handler. - -The example below showcases three tasks, two of them expect a message. - -``` rust -{{#include ../../../examples/message.rs}} -``` - -``` console -$ cargo run --example message -{{#include ../../../ci/expected/message.run}}``` - -## Capacity - -Task dispatchers do *not* use any dynamic memory allocation. The memory required -to store messages is statically reserved. The framework will reserve enough -space for every context to be able to spawn each task at most once. This is a -sensible default but the "inbox" capacity of each task can be controlled using -the `capacity` argument of the `task` attribute. - -The example below sets the capacity of the software task `foo` to 4. If the -capacity is not specified then the second `spawn.foo` call in `UART0` would -fail. - -``` rust -{{#include ../../../examples/capacity.rs}} -``` - -``` console -$ cargo run --example capacity -{{#include ../../../ci/expected/capacity.run}}``` |
