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 or tasks.$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.