Function cortex_m_rtfm_macros::app
[−]
[src]
pub fn app(ts: TokenStream) -> TokenStream
The app!
macro, a macro used to specify the tasks and resources of a RTFM application.
The contents of this macro uses a key: value
syntax. All the possible keys are shown below:
app! {
device: ..,
resources: { .. },
init: { .. },
idle: { .. },
tasks: { .. },
}
device
The value of this key is a Rust path, like foo::bar::baz
, that must point to a device crate,
a crate generated using svd2rust
.
resources
This key is optional. Its value is a list of static
variables. These variables are the data
that can be safely accessed, modified and shared by tasks.
resources: {
static A: bool = false;
static B: i32 = 0;
static C: [u8; 16] = [0; 16];
static D: Thing = Thing::new(..);
static E: Thing;
}
The initial value of a resource can be omitted. This means that the resource will be runtime initialized; these runtime initialized resources are also known as late resources.
If this key is omitted its value defaults to an empty list.
init
This key is optional. Its value is a set of key values. All the possible keys are shown below:
init: {
path: ..,
}
init.path
This key is optional. Its value is a Rust path, like foo::bar::baz
, that points to the
initialization function.
If the key is omitted its value defaults to init
.
init.resources
This key is optional. Its value is a set of resources the init
function owns. The resources
in this list must be a subset of the resources listed in the top resources
key. Note that some
restrictions apply:
- The resources in this list can't be late resources.
- The resources that appear in this list can't appear in other list like
idle.resources
ortasks.$TASK.resources
If this key is omitted its value is assumed to be an empty list.
idle
This key is optional. Its value is a set of key values. All the possible keys are shown below:
idle: {
path: ..,
resources: [..],
}
idle.path
This key is optional. Its value is a Rust path, like foo::bar::baz
, that points to the idle
loop function.
If the key is omitted its value defaults to idle
.
idle.resources
This key is optional. Its value is a list of resources the idle
loop has access to. The
resources in this list must be a subset of the resources listed in the top resources
key.
If omitted its value defaults to an empty list.
tasks
This key is optional. Its value is a list of tasks. Each task itself is a set of key value pair. The full syntax is shown below:
tasks: {
$TASK: {
enabled: ..,
path: ..,
priority: ..,
resources: [..],
},
}
If this key is omitted its value is assumed to be an empty list.
tasks.$TASK
The key must be either a Cortex-M exception or a device specific interrupt. PENDSV
, SVCALL
,
SYS_TICK
are considered as exceptions. All other names are assumed to be interrupts.
tasks.$TASK.enabled
This key is optional for interrupts and forbidden for exceptions. Its value must be a boolean
and indicates whether the interrupt will be enabled (true
) or disabled (false
) after init
ends and before idle
starts.
If this key is omitted its value defaults to true
.
tasks.$TASK.path
The value of this key is a Rust path, like foo::bar::baz
, that points to the handler of this
task.
tasks.$TASK.priority
This key is optional. Its value is an integer with type u8
that specifies the priority of this
task. The minimum valid priority is 1. The maximum valid priority depends on the number of the
NVIC priority bits the device has; if the device has 4 priority bits the maximum allowed value
would be 16.
If this key is omitted its value defaults to 1
.
tasks.$TASK.resources
This key is optional. Its value is a list of resources this task has access to. The resources in
this list must be a subset of the resources listed in the top resources
key.
If omitted its value defaults to an empty list.