aboutsummaryrefslogtreecommitdiff
path: root/examples/singleton.rs
diff options
context:
space:
mode:
authorGravatar Jorge Aparicio <jorge@japaric.io> 2018-11-03 17:02:41 +0100
committerGravatar Jorge Aparicio <jorge@japaric.io> 2018-11-03 17:16:55 +0100
commitc631049efcadca8b07940c794cce2be58fa48444 (patch)
treef6bd73e5c396fc06072557ee965cc59e9c8e3e9f /examples/singleton.rs
parent653338e7997a0cdc5deaed98b1bb5f60006717ed (diff)
downloadrtic-c631049efcadca8b07940c794cce2be58fa48444.tar.gz
rtic-c631049efcadca8b07940c794cce2be58fa48444.tar.zst
rtic-c631049efcadca8b07940c794cce2be58fa48444.zip
v0.4.0
closes #32 closes #33
Diffstat (limited to 'examples/singleton.rs')
-rw-r--r--examples/singleton.rs69
1 files changed, 69 insertions, 0 deletions
diff --git a/examples/singleton.rs b/examples/singleton.rs
new file mode 100644
index 00000000..888a5a67
--- /dev/null
+++ b/examples/singleton.rs
@@ -0,0 +1,69 @@
+//! examples/singleton.rs
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+extern crate panic_semihosting;
+
+use alloc_singleton::stable::pool::{Box, Pool};
+use cortex_m_semihosting::debug;
+use lm3s6965::Interrupt;
+use rtfm::app;
+
+macro_rules! println {
+ ($($tt:tt)*) => {
+ if let Ok(mut stdout) = cortex_m_semihosting::hio::hstdout() {
+ use core::fmt::Write;
+
+ writeln!(stdout, $($tt)*).ok();
+ }
+ };
+}
+
+#[app(device = lm3s6965)]
+const APP: () = {
+ #[Singleton(Send)]
+ static mut M: [u32; 2] = [0; 2];
+
+ static mut P: Pool<M> = ();
+
+ #[init(resources = [M])]
+ fn init() {
+ rtfm::pend(Interrupt::I2C0);
+
+ P = Pool::new(resources.M);
+ }
+
+ #[interrupt(
+ priority = 2,
+ resources = [P],
+ spawn = [foo, bar],
+ )]
+ fn I2C0() {
+ spawn.foo(resources.P.alloc(1).unwrap()).unwrap();
+ spawn.bar(resources.P.alloc(2).unwrap()).unwrap();
+ }
+
+ #[task(resources = [P])]
+ fn foo(x: Box<M>) {
+ println!("foo({})", x);
+
+ resources.P.lock(|p| p.dealloc(x));
+
+ debug::exit(debug::EXIT_SUCCESS);
+ }
+
+ #[task(priority = 2, resources = [P])]
+ fn bar(x: Box<M>) {
+ println!("bar({})", x);
+
+ resources.P.dealloc(x);
+ }
+
+ extern "C" {
+ fn UART0();
+ fn UART1();
+ }
+};