aboutsummaryrefslogtreecommitdiff
path: root/rtic/examples/destructure.rs
diff options
context:
space:
mode:
authorGravatar Emil Fresk <emil.fresk@gmail.com> 2023-01-23 20:05:47 +0100
committerGravatar Henrik Tjäder <henrik@tjaders.com> 2023-03-01 00:33:31 +0100
commit306aa47170fd59369b7a184924e287dc3706d64d (patch)
tree75a331a63a4021f078e330bf2ce4edb1228e2ecf /rtic/examples/destructure.rs
parentb8b881f446a226d6f3c4a7db7c9174590b47dbf6 (diff)
downloadrtic-306aa47170fd59369b7a184924e287dc3706d64d.tar.gz
rtic-306aa47170fd59369b7a184924e287dc3706d64d.tar.zst
rtic-306aa47170fd59369b7a184924e287dc3706d64d.zip
Add rtic-timer (timerqueue + monotonic) and rtic-monotonics (systick-monotonic)
Diffstat (limited to 'rtic/examples/destructure.rs')
-rw-r--r--rtic/examples/destructure.rs57
1 files changed, 57 insertions, 0 deletions
diff --git a/rtic/examples/destructure.rs b/rtic/examples/destructure.rs
new file mode 100644
index 00000000..81eff3b4
--- /dev/null
+++ b/rtic/examples/destructure.rs
@@ -0,0 +1,57 @@
+//! examples/destructure.rs
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![deny(missing_docs)]
+#![no_main]
+#![no_std]
+#![feature(type_alias_impl_trait)]
+
+use panic_semihosting as _;
+
+#[rtic::app(device = lm3s6965, dispatchers = [UART0])]
+mod app {
+ use cortex_m_semihosting::{debug, hprintln};
+
+ #[shared]
+ struct Shared {
+ a: u32,
+ b: u32,
+ c: u32,
+ }
+
+ #[local]
+ struct Local {}
+
+ #[init]
+ fn init(_: init::Context) -> (Shared, Local) {
+ foo::spawn().unwrap();
+ bar::spawn().unwrap();
+
+ (Shared { a: 0, b: 1, c: 2 }, Local {})
+ }
+
+ #[idle]
+ fn idle(_: idle::Context) -> ! {
+ debug::exit(debug::EXIT_SUCCESS); // Exit QEMU simulator
+ loop {}
+ }
+
+ // Direct destructure
+ #[task(shared = [&a, &b, &c])]
+ async fn foo(cx: foo::Context) {
+ let a = cx.shared.a;
+ let b = cx.shared.b;
+ let c = cx.shared.c;
+
+ hprintln!("foo: a = {}, b = {}, c = {}", a, b, c);
+ }
+
+ // De-structure-ing syntax
+ #[task(shared = [&a, &b, &c])]
+ async fn bar(cx: bar::Context) {
+ let bar::SharedResources { a, b, c, .. } = cx.shared;
+
+ hprintln!("bar: a = {}, b = {}, c = {}", a, b, c);
+ }
+}