Crate cortex_m_rtfm [] [src]

Real Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollers

This crate is based on the RTFM framework created by the Embedded Systems group at Luleå University of Technology, led by Prof. Per Lindgren, and uses a simplified version of the Stack Resource Policy as scheduling policy (check the references for details).

Features

  • Event triggered tasks as the unit of concurrency.
  • Support for prioritization of tasks and, thus, preemptive multitasking.
  • Efficient and data race free memory sharing through fine grained non global critical sections.
  • Deadlock free execution guaranteed at compile time.
  • Minimal scheduling overhead as the scheduler has no "software component": the hardware does all the scheduling.
  • Highly efficient memory usage: All the tasks share a single call stack and there's no hard dependency on a dynamic memory allocator.
  • All Cortex M devices are fully supported.
  • This task model is amenable to known WCET (Worst Case Execution Time) analysis and scheduling analysis techniques. (Though we haven't yet developed Rust friendly tooling for that.)

Constraints

  • Tasks must run to completion. That's it, tasks can't contain endless loops. However, you can run an endless event loop in the idle loop.

  • Task priorities must remain constant at runtime.

Dependencies

The application crate must depend on a device crate generated using svd2rust v0.12.x and the "rt" feature of that crate must be enabled. The SVD file used to generate the device crate must contain <cpu> information.

app!

The app! macro is documented here.

Important: Cortex-M7 devices

If targeting a Cortex-M7 device with revision r0p1 then you MUST enable the cm7-r0p1 Cargo feature of this crate or the Resource.claim and Resource.claim_mut methods WILL misbehave.

Examples

In increasing grade of complexity. See the examples module.

References

  • Baker, T. P. (1991). Stack-based scheduling of realtime processes. Real-Time Systems, 3(1), 67-99.

The original Stack Resource Policy paper. PDF.

  • Eriksson, J., Häggström, F., Aittamaa, S., Kruglyak, A., & Lindgren, P. (2013, June). Real-time for the masses, step 1: Programming API and static priority SRP kernel primitives. In Industrial Embedded Systems (SIES), 2013 8th IEEE International Symposium on (pp. 110-113). IEEE.

A description of the RTFM task and resource model. PDF

Reexports

pub use cortex_m_rtfm_macros::app;

Modules

examples

Examples

Structs

Threshold

Preemption threshold token

Traits

Resource

A resource, a mechanism to share data between tasks

Functions

atomic

Executes the closure f in a preemption free context

bkpt

Puts the processor in Debug state. Debuggers can pick this up as a "breakpoint".

set_pending

Sets an interrupt, that is a task, as pending

wfi

Wait For Interrupt