rtic/README.md

143 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

2020-06-11 19:18:29 +02:00
# Real-Time Interrupt-driven Concurrency
2017-04-27 23:27:07 +02:00
A concurrency framework for building real-time systems.
2020-06-11 20:29:25 +02:00
Formerly known as Real-Time For the Masses.
2020-07-28 03:11:27 +02:00
[![crates.io](https://img.shields.io/crates/v/cortex-m-rtic)](https://crates.io/crates/cortex-m-rtic)
[![docs.rs](https://docs.rs/cortex-m-rtic/badge.svg)](https://docs.rs/cortex-m-rtic)
[![book](https://img.shields.io/badge/web-rtic.rs-red.svg?style=flat&label=book&colorB=d33847)](https://rtic.rs/)
[![rustc](https://img.shields.io/badge/rustc-1.36+-lightgray.svg)](https://github.com/rust-lang/rust/releases/tag/1.36.0)
[![matrix](https://img.shields.io/matrix/rtic:matrix.org)](https://matrix.to/#/#rtic:matrix.org)
[![Meeting notes](https://hackmd.io/badge.svg)](https://hackmd.io/@xmis9JvZT8Gvo9lOEKyZ4Q/SkBJKsjuH)
2020-07-15 13:23:18 +02:00
2018-11-03 17:02:41 +01:00
## Features
2017-03-05 06:26:14 +01:00
2018-11-03 17:02:41 +01:00
- **Tasks** as the unit of concurrency [^1]. Tasks can be *event triggered*
(fired in response to asynchronous stimuli) or spawned by the application on
demand.
- **Message passing** between tasks. Specifically, messages can be passed to
software tasks at spawn time.
- **A timer queue** [^2]. Software tasks can be scheduled to run at some time
in the future. This feature can be used to implement periodic tasks.
- Support for prioritization of tasks and, thus, **preemptive multitasking**.
- **Efficient and data race free memory sharing** through fine grained *priority
based* critical sections [^1].
2021-06-28 19:38:33 +02:00
- **Deadlock free execution** guaranteed at compile time. This is a stronger
2018-11-03 17:02:41 +01:00
guarantee than what's provided by [the standard `Mutex`
abstraction][std-mutex].
[std-mutex]: https://doc.rust-lang.org/std/sync/struct.Mutex.html
- **Minimal scheduling overhead**. The task scheduler has minimal software
footprint; the hardware does the bulk of 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.
2019-08-21 10:17:27 +02:00
- **All Cortex-M devices are fully supported**.
2018-11-03 17:02:41 +01:00
- 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.)
## Requirements
- Applications must be written using the 2018 edition.
2021-08-27 05:55:20 +02:00
### Crate `cortex-m` 0.6 vs 0.7 in RTIC 0.5.x
2021-08-27 05:24:30 +02:00
2021-08-27 05:55:20 +02:00
The crate `cortex-m` 0.7 started using trait `InterruptNumber` for interrupts instead of `Nr` from `bare-metal`. In order to preserve backwards compatibility, RTIC 0.5.x will keep using `cortex-m` 0.6 by default. `cortex-m` 0.7 can be enabled using the feature `cortex-m-7` and disabling default features:
2021-08-27 05:24:30 +02:00
```
cortex-m-rtic = { version = "0.5.8", default-features = false, features = ["cortex-m-7"] }
```
RTIC 0.6 already uses `cortex-m` 0.7 by default.
## [User documentation](https://rtic.rs) - [(Development version)](https://rtic.rs/dev)
2020-10-06 20:04:22 +02:00
## [API reference](https://rtic.rs/stable/api/)
2020-10-06 20:04:22 +02:00
## [Community provided examples repo][examples]
[examples]: https://github.com/rtic-rs/rtic-examples
## Chat
2020-06-11 19:18:29 +02:00
Join us and talk about RTIC in the [Matrix room][matrix-room].
Weekly meeting notes can be found over at [HackMD][hackmd]
2020-06-11 20:29:25 +02:00
[matrix-room]: https://matrix.to/#/#rtic:matrix.org
[hackmd]: https://hackmd.io/@xmis9JvZT8Gvo9lOEKyZ4Q/SkBJKsjuH
## Contributing
New features and big changes should go through the RFC process in the
[dedicated RFC repository][rfcs].
2020-06-11 19:18:29 +02:00
[rfcs]: https://github.com/rtic-rs/rfcs
2021-08-26 10:58:59 +02:00
## Running tests locally
To check all `Run-pass tests` locally on your `thumbv6m-none-eabi` or `thumbv7m-none-eabi` target device, run
```console
$ cargo xtask --target <your target>
# ˆˆˆˆˆˆˆˆˆˆˆˆ
# e.g. thumbv7m-none-eabi
```
2018-11-03 17:02:41 +01:00
## Acknowledgments
This crate is based on the [Real-Time For the Masses language][rtfm-lang]
created by the Embedded Systems group at [Luleå University of Technology][ltu],
led by [Prof. Per Lindgren][per].
2018-11-03 17:02:41 +01:00
2020-06-11 20:29:25 +02:00
[rtfm-lang]: http://www.rtfm-lang.org/
2018-11-03 17:02:41 +01:00
[ltu]: https://www.ltu.se/?l=en
[per]: https://www.ltu.se/staff/p/pln-1.11258?l=en
## References
[^1]: 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.
[^2]: Lindgren, P., Fresk, E., Lindner, M., Lindner, A., Pereira, D., & Pinho,
L. M. (2016). Abstract timers and their implementation onto the arm cortex-m
family of mcus. ACM SIGBED Review, 13(1), 48-53.
## License
All source code (including code snippets) is licensed under either of
2017-03-05 06:26:14 +01:00
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
2018-11-03 17:02:41 +01:00
[https://www.apache.org/licenses/LICENSE-2.0][L1])
- MIT license ([LICENSE-MIT](LICENSE-MIT) or
[https://opensource.org/licenses/MIT][L2])
2017-03-05 06:26:14 +01:00
2018-11-03 17:02:41 +01:00
[L1]: https://www.apache.org/licenses/LICENSE-2.0
[L2]: https://opensource.org/licenses/MIT
2017-03-05 06:26:14 +01:00
at your option.
2018-11-03 17:02:41 +01:00
The written prose contained within the book is licensed under the terms of the
Creative Commons CC-BY-SA v4.0 license ([LICENSE-CC-BY-SA](LICENSE-CC-BY-SA) or
[https://creativecommons.org/licenses/by-sa/4.0/legalcode][L3]).
[L3]: https://creativecommons.org/licenses/by-sa/4.0/legalcode
### Contribution
2017-03-05 06:26:14 +01:00
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
2018-11-03 17:02:41 +01:00
licensed as above, without any additional terms or conditions.