aboutsummaryrefslogtreecommitdiff
path: root/examples/shared-with-init.rs
diff options
context:
space:
mode:
authorGravatar Jorge Aparicio <jorge@japaric.io> 2019-04-16 21:54:19 +0200
committerGravatar Jorge Aparicio <jorge@japaric.io> 2019-04-21 18:00:22 +0200
commite865cbb2e59a95962d7e4d45c31f9ff1e4ba6579 (patch)
tree20ee060345b788d3f05c7174672abdead0b935bd /examples/shared-with-init.rs
parentc4bad51deb75efc033431be513e264c3247b64cb (diff)
downloadrtic-e865cbb2e59a95962d7e4d45c31f9ff1e4ba6579.tar.gz
rtic-e865cbb2e59a95962d7e4d45c31f9ff1e4ba6579.tar.zst
rtic-e865cbb2e59a95962d7e4d45c31f9ff1e4ba6579.zip
book: resources shared with init must also be `Send`
Diffstat (limited to 'examples/shared-with-init.rs')
-rw-r--r--examples/shared-with-init.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/examples/shared-with-init.rs b/examples/shared-with-init.rs
new file mode 100644
index 00000000..5ddd2cc3
--- /dev/null
+++ b/examples/shared-with-init.rs
@@ -0,0 +1,38 @@
+//! `examples/shared-with-init.rs`
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+extern crate panic_halt;
+
+use cortex_m_semihosting::debug;
+use lm3s6965::Interrupt;
+use rtfm::app;
+
+pub struct MustBeSend;
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ static mut SHARED: Option<MustBeSend> = None;
+
+ #[init(resources = [SHARED])]
+ fn init() {
+ // this `message` will be sent to task `UART0`
+ let message = MustBeSend;
+ *resources.SHARED = Some(message);
+
+ rtfm::pend(Interrupt::UART0);
+ }
+
+ #[interrupt(resources = [SHARED])]
+ fn UART0() {
+ if let Some(message) = resources.SHARED.take() {
+ // `message` has been received
+ drop(message);
+
+ debug::exit(debug::EXIT_SUCCESS);
+ }
+ }
+};