2020-06-11 19:18:29 +02:00
|
|
|
# Real-Time Interrupt-driven Concurrency
|
2017-04-27 23:27:07 +02:00
|
|
|
|
2020-07-14 15:40:57 +02:00
|
|
|
A concurrency framework for building real-time systems.
|
2017-04-21 07:24:54 +02:00
|
|
|
|
2020-06-11 20:29:25 +02:00
|
|
|
Formerly known as Real-Time For the Masses.
|
|
|
|
|
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].
|
|
|
|
|
|
|
|
- **Deadlock free execution** guaranteed at compile time. This is an stronger
|
|
|
|
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
|
|
|
|
|
2019-04-21 20:52:16 +02:00
|
|
|
- Rust 1.36.0+
|
2018-11-03 17:02:41 +01:00
|
|
|
|
|
|
|
- Applications must be written using the 2018 edition.
|
|
|
|
|
2020-06-11 19:18:29 +02:00
|
|
|
## [User documentation](https://rtic.rs)
|
2018-11-03 17:02:41 +01:00
|
|
|
|
2020-06-11 20:29:25 +02:00
|
|
|
## [API reference](https://rtic.rs/0.5/api/)
|
2018-11-03 17:02:41 +01:00
|
|
|
|
2019-09-15 22:43:10 +02:00
|
|
|
## Chat
|
2020-06-11 19:18:29 +02:00
|
|
|
Join us and talk about RTIC in the [Matrix room][matrix-room].
|
2019-09-15 22:43:10 +02:00
|
|
|
|
2020-06-11 20:29:25 +02:00
|
|
|
[matrix-room]: https://matrix.to/#/#rtic:matrix.org
|
2019-09-15 22:43:10 +02:00
|
|
|
|
|
|
|
## Contributing
|
2019-09-15 23:04:16 +02:00
|
|
|
New features and big changes should go through the RFC process in the [dedicated RFC repository][rfcs].
|
2019-09-15 22:43:10 +02:00
|
|
|
|
2020-06-11 19:18:29 +02:00
|
|
|
[rfcs]: https://github.com/rtic-rs/rfcs
|
2019-09-15 22:43:10 +02:00
|
|
|
|
2018-11-03 17:02:41 +01:00
|
|
|
## Acknowledgments
|
|
|
|
|
2020-06-11 20:29:25 +02:00
|
|
|
This crate is based on [the Real-Time For the Masses language][rtfm-lang] created by the Embedded
|
2018-11-03 17:02:41 +01:00
|
|
|
Systems group at [Luleå University of Technology][ltu], led by [Prof. Per
|
|
|
|
Lindgren][per].
|
|
|
|
|
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.
|