aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/extern_binds.rs48
-rw-r--r--examples/extern_spawn.rs35
2 files changed, 83 insertions, 0 deletions
diff --git a/examples/extern_binds.rs b/examples/extern_binds.rs
new file mode 100644
index 00000000..632f4ca0
--- /dev/null
+++ b/examples/extern_binds.rs
@@ -0,0 +1,48 @@
+//! examples/extern_binds.rs
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+use cortex_m_semihosting::hprintln;
+use panic_semihosting as _;
+
+// Free function implementing the interrupt bound task `foo`.
+fn foo(_: app::foo::Context) {
+ hprintln!("foo called").ok();
+}
+
+#[rtic::app(device = lm3s6965)]
+mod app {
+ use crate::foo;
+ use cortex_m_semihosting::{debug, hprintln};
+ use lm3s6965::Interrupt;
+
+ #[init]
+ fn init(_: init::Context) -> init::LateResources {
+ rtic::pend(Interrupt::UART0);
+
+ hprintln!("init").unwrap();
+
+ init::LateResources {}
+ }
+
+ #[idle]
+ fn idle(_: idle::Context) -> ! {
+ hprintln!("idle").unwrap();
+
+ rtic::pend(Interrupt::UART0);
+
+ debug::exit(debug::EXIT_SUCCESS);
+
+ loop {
+ cortex_m::asm::nop();
+ }
+ }
+
+ extern "Rust" {
+ #[task(binds = UART0)]
+ fn foo(_: foo::Context);
+ }
+}
diff --git a/examples/extern_spawn.rs b/examples/extern_spawn.rs
new file mode 100644
index 00000000..1be3d512
--- /dev/null
+++ b/examples/extern_spawn.rs
@@ -0,0 +1,35 @@
+//! examples/extern_spawn.rs
+
+#![deny(unsafe_code)]
+#![deny(warnings)]
+#![no_main]
+#![no_std]
+
+use cortex_m_semihosting::{debug, hprintln};
+use panic_semihosting as _;
+
+// Free function implementing the spawnable task `foo`.
+fn foo(_c: app::foo::Context, x: i32, y: u32) {
+ hprintln!("foo {}, {}", x, y).unwrap();
+ if x == 2 {
+ debug::exit(debug::EXIT_SUCCESS);
+ }
+ app::foo::spawn(2, 3).unwrap();
+}
+
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
+mod app {
+ use crate::foo;
+
+ #[init]
+ fn init(_c: init::Context) -> init::LateResources {
+ foo::spawn(1, 2).unwrap();
+
+ init::LateResources {}
+ }
+
+ extern "Rust" {
+ #[task()]
+ fn foo(_c: foo::Context, _x: i32, _y: u32);
+ }
+}