aboutsummaryrefslogtreecommitdiff
path: root/examples/shared-with-init.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/shared-with-init.rs')
-rw-r--r--examples/shared-with-init.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/examples/shared-with-init.rs b/examples/shared-with-init.rs
new file mode 100644
index 00000000..85c72761
--- /dev/null
+++ b/examples/shared-with-init.rs
@@ -0,0 +1,45 @@
+//! `examples/shared-with-init.rs`
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+use cortex_m_semihosting::debug;
+use lm3s6965::Interrupt;
+use panic_halt as _;
+use rtic::app;
+
+pub struct MustBeSend;
+
+#[app(device = lm3s6965)]
+mod app {
+ use super::MustBeSend;
+
+ #[resources]
+ struct Resources {
+ #[init(None)]
+ shared: Option<MustBeSend>,
+ }
+
+ #[init(resources = [shared])]
+ fn init(c: init::Context) -> init::LateResources {
+ // this `message` will be sent to task `UART0`
+ let message = MustBeSend;
+ *c.resources.shared = Some(message);
+
+ rtic::pend(Interrupt::UART0);
+
+ init::LateResources {}
+ }
+
+ #[task(binds = UART0, resources = [shared])]
+ fn uart0(c: uart0::Context) {
+ if let Some(message) = c.resources.shared.take() {
+ // `message` has been received
+ drop(message);
+
+ debug::exit(debug::EXIT_SUCCESS);
+ }
+ }
+}