aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/baseline.rs50
-rw-r--r--examples/big-struct-opt.rs15
-rw-r--r--examples/binds.rs4
-rw-r--r--examples/capacity.rs4
-rw-r--r--examples/cfg-whole-task.rs4
-rw-r--r--examples/cfg.rs4
-rw-r--r--examples/destructure.rs4
-rw-r--r--examples/double_schedule.rs28
-rw-r--r--examples/extern_binds.rs4
-rw-r--r--examples/extern_spawn.rs4
-rw-r--r--examples/generics.rs4
-rw-r--r--examples/hardware.rs4
-rw-r--r--examples/idle.rs4
-rw-r--r--examples/init.rs4
-rw-r--r--examples/late.rs4
-rw-r--r--examples/lock.rs4
-rw-r--r--examples/message.rs4
-rw-r--r--examples/multilock.rs4
-rw-r--r--examples/not-sync.rs6
-rw-r--r--examples/only-shared-access.rs4
-rw-r--r--examples/periodic.rs32
-rw-r--r--examples/peripherals-taken.rs4
-rw-r--r--examples/pool.rs4
-rw-r--r--examples/preempt.rs4
-rw-r--r--examples/ramfunc.rs4
-rw-r--r--examples/resource-user-struct.rs4
-rw-r--r--examples/resource.rs4
-rw-r--r--examples/schedule.rs44
-rw-r--r--examples/spawn.rs4
-rw-r--r--examples/spawn2.rs4
-rw-r--r--examples/static.rs4
-rw-r--r--examples/t-binds.rs6
-rw-r--r--examples/t-cfg-resources.rs19
-rw-r--r--examples/t-cfg.rs8
-rw-r--r--examples/t-htask-main.rs4
-rw-r--r--examples/t-idle-main.rs4
-rw-r--r--examples/t-init-main.rs4
-rw-r--r--examples/t-late-not-send.rs13
-rw-r--r--examples/t-resource.rs6
-rw-r--r--examples/t-schedule-core-stable.rs10
-rw-r--r--examples/t-schedule.rs55
-rw-r--r--examples/t-spawn.rs6
-rw-r--r--examples/t-stask-main.rs4
-rw-r--r--examples/task-local-minimal.rs4
-rw-r--r--examples/task-local.rs4
-rw-r--r--examples/task.rs4
-rw-r--r--examples/task_named_main.rs4
-rw-r--r--examples/types.rs25
48 files changed, 217 insertions, 238 deletions
diff --git a/examples/baseline.rs b/examples/baseline.rs
deleted file mode 100644
index 17278748..00000000
--- a/examples/baseline.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-//! examples/baseline.rs
-
-#![deny(unsafe_code)]
-#![deny(warnings)]
-#![no_main]
-#![no_std]
-
-use panic_semihosting as _;
-
-// NOTE: does NOT properly work on QEMU
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
-mod app {
- use cortex_m_semihosting::{debug, hprintln};
- use lm3s6965::Interrupt;
-
- #[init]
- fn init(cx: init::Context) -> init::LateResources {
- // omitted: initialization of `CYCCNT`
-
- hprintln!("init(baseline = {:?})", cx.start).unwrap();
-
- // `foo` inherits the baseline of `init`: `Instant(0)`
- foo::spawn().unwrap();
-
- init::LateResources {}
- }
-
- #[task]
- fn foo(cx: foo::Context) {
- static mut ONCE: bool = true;
-
- hprintln!("foo(baseline = {:?})", cx.scheduled).unwrap();
-
- if *ONCE {
- *ONCE = false;
-
- rtic::pend(Interrupt::UART0);
- } else {
- debug::exit(debug::EXIT_SUCCESS);
- }
- }
-
- #[task(binds = UART0)]
- fn uart0(cx: uart0::Context) {
- hprintln!("UART0(baseline = {:?})", cx.start).unwrap();
-
- // `foo` inherits the baseline of `UART0`: its `start` time
- foo::spawn().unwrap();
- }
-}
diff --git a/examples/big-struct-opt.rs b/examples/big-struct-opt.rs
index 85ec5e61..e6a5c172 100644
--- a/examples/big-struct-opt.rs
+++ b/examples/big-struct-opt.rs
@@ -6,7 +6,7 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
/// Some big struct
pub struct BigStruct {
@@ -31,7 +31,7 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
let big_struct = unsafe {
static mut BIG_STRUCT: MaybeUninit<BigStruct> = MaybeUninit::uninit();
@@ -40,9 +40,12 @@ mod app {
&mut *BIG_STRUCT.as_mut_ptr()
};
- init::LateResources {
- // assign the reference so we can use the resource
- big_struct,
- }
+ (
+ init::LateResources {
+ // assign the reference so we can use the resource
+ big_struct,
+ },
+ init::Monotonics(),
+ )
}
}
diff --git a/examples/binds.rs b/examples/binds.rs
index f681aa57..9cbe2994 100644
--- a/examples/binds.rs
+++ b/examples/binds.rs
@@ -14,12 +14,12 @@ mod app {
use lm3s6965::Interrupt;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
hprintln!("init").unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/capacity.rs b/examples/capacity.rs
index b25a7584..06bd921e 100644
--- a/examples/capacity.rs
+++ b/examples/capacity.rs
@@ -13,10 +13,10 @@ mod app {
use lm3s6965::Interrupt;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task(binds = UART0)]
diff --git a/examples/cfg-whole-task.rs b/examples/cfg-whole-task.rs
index b19c280c..47c3530e 100644
--- a/examples/cfg-whole-task.rs
+++ b/examples/cfg-whole-task.rs
@@ -24,11 +24,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn().unwrap();
foo::spawn().unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/cfg.rs b/examples/cfg.rs
index d3f2cea1..43c2593c 100644
--- a/examples/cfg.rs
+++ b/examples/cfg.rs
@@ -21,11 +21,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn().unwrap();
foo::spawn().unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/destructure.rs b/examples/destructure.rs
index d843978b..d085e4bf 100644
--- a/examples/destructure.rs
+++ b/examples/destructure.rs
@@ -24,11 +24,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
// Direct destructure
diff --git a/examples/double_schedule.rs b/examples/double_schedule.rs
index 32477efe..403f3583 100644
--- a/examples/double_schedule.rs
+++ b/examples/double_schedule.rs
@@ -7,29 +7,37 @@
use panic_semihosting as _;
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
- use rtic::cyccnt::U32Ext;
+ use dwt_systick_monotonic::{
+ consts::{U0, U8},
+ DwtSystick,
+ };
+ use rtic::time::duration::Seconds;
- #[resources]
- struct Resources {
- nothing: (),
- }
+ #[monotonic(binds = SysTick, default = true)]
+ type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
task1::spawn().ok();
- init::LateResources { nothing: () }
+ let mut dcb = cx.core.DCB;
+ let dwt = cx.core.DWT;
+ let systick = cx.core.SYST;
+
+ let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000);
+
+ (init::LateResources {}, init::Monotonics(mono))
}
#[task]
fn task1(_cx: task1::Context) {
- task2::schedule(_cx.scheduled + 100.cycles()).ok();
+ task2::spawn_after(Seconds(1_u32)).ok();
}
#[task]
fn task2(_cx: task2::Context) {
- task1::schedule(_cx.scheduled + 100.cycles()).ok();
+ task1::spawn_after(Seconds(1_u32)).ok();
}
}
diff --git a/examples/extern_binds.rs b/examples/extern_binds.rs
index 632f4ca0..3c8786dd 100644
--- a/examples/extern_binds.rs
+++ b/examples/extern_binds.rs
@@ -20,12 +20,12 @@ mod app {
use lm3s6965::Interrupt;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
hprintln!("init").unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/extern_spawn.rs b/examples/extern_spawn.rs
index 1be3d512..275ac539 100644
--- a/examples/extern_spawn.rs
+++ b/examples/extern_spawn.rs
@@ -22,10 +22,10 @@ mod app {
use crate::foo;
#[init]
- fn init(_c: init::Context) -> init::LateResources {
+ fn init(_c: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn(1, 2).unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
extern "Rust" {
diff --git a/examples/generics.rs b/examples/generics.rs
index f3829a06..eabfff7e 100644
--- a/examples/generics.rs
+++ b/examples/generics.rs
@@ -21,11 +21,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task(binds = UART0, resources = [shared])]
diff --git a/examples/hardware.rs b/examples/hardware.rs
index 99e8da2e..3cf98807 100644
--- a/examples/hardware.rs
+++ b/examples/hardware.rs
@@ -13,14 +13,14 @@ mod app {
use lm3s6965::Interrupt;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
// Pends the UART0 interrupt but its handler won't run until *after*
// `init` returns because interrupts are disabled
rtic::pend(Interrupt::UART0); // equivalent to NVIC::pend
hprintln!("init").unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/idle.rs b/examples/idle.rs
index 1aac56c2..db03dc70 100644
--- a/examples/idle.rs
+++ b/examples/idle.rs
@@ -12,10 +12,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
hprintln!("init").unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/init.rs b/examples/init.rs
index ca67a2b7..9de79581 100644
--- a/examples/init.rs
+++ b/examples/init.rs
@@ -12,7 +12,7 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(cx: init::Context) -> init::LateResources {
+ fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
static mut X: u32 = 0;
// Cortex-M peripherals
@@ -32,6 +32,6 @@ mod app {
debug::exit(debug::EXIT_SUCCESS);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
}
diff --git a/examples/late.rs b/examples/late.rs
index d4efaba3..e65b6e69 100644
--- a/examples/late.rs
+++ b/examples/late.rs
@@ -25,13 +25,13 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
static mut Q: Queue<u32, U4> = Queue(i::Queue::new());
let (p, c) = Q.split();
// Initialization of late resources
- init::LateResources { p, c }
+ (init::LateResources { p, c }, init::Monotonics())
}
#[idle(resources = [c])]
diff --git a/examples/lock.rs b/examples/lock.rs
index 2fbf7608..75d47d24 100644
--- a/examples/lock.rs
+++ b/examples/lock.rs
@@ -19,10 +19,10 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::GPIOA);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
// when omitted priority is assumed to be `1`
diff --git a/examples/message.rs b/examples/message.rs
index 4c5d8997..722e73a7 100644
--- a/examples/message.rs
+++ b/examples/message.rs
@@ -12,10 +12,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn(/* no message */).unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task]
diff --git a/examples/multilock.rs b/examples/multilock.rs
index a6985dfa..ad9d72ab 100644
--- a/examples/multilock.rs
+++ b/examples/multilock.rs
@@ -25,10 +25,10 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::GPIOA);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
// when omitted priority is assumed to be `1`
diff --git a/examples/not-sync.rs b/examples/not-sync.rs
index 21c316ae..f01d4043 100644
--- a/examples/not-sync.rs
+++ b/examples/not-sync.rs
@@ -6,7 +6,7 @@
#![no_std]
use core::marker::PhantomData;
-use panic_halt as _;
+use panic_semihosting as _;
pub struct NotSync {
_0: PhantomData<*const ()>,
@@ -25,10 +25,10 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
debug::exit(debug::EXIT_SUCCESS);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task(resources = [&shared])]
diff --git a/examples/only-shared-access.rs b/examples/only-shared-access.rs
index 8d42fd4d..2c6ad4c4 100644
--- a/examples/only-shared-access.rs
+++ b/examples/only-shared-access.rs
@@ -18,11 +18,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- init::LateResources { key: 0xdeadbeef }
+ (init::LateResources { key: 0xdeadbeef }, init::Monotonics())
}
#[task(binds = UART0, resources = [&key])]
diff --git a/examples/periodic.rs b/examples/periodic.rs
index 3ff9c907..82c21280 100644
--- a/examples/periodic.rs
+++ b/examples/periodic.rs
@@ -8,27 +8,33 @@
use panic_semihosting as _;
// NOTE: does NOT work on QEMU!
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
- use cortex_m_semihosting::hprintln;
- use rtic::cyccnt::{Instant, U32Ext};
+ use dwt_systick_monotonic::{
+ consts::{U0, U8},
+ DwtSystick,
+ };
+ use rtic::time::duration::Seconds;
- const PERIOD: u32 = 8_000_000;
+ #[monotonic(binds = SysTick, default = true)]
+ type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz
#[init]
- fn init(cx: init::Context) -> init::LateResources {
- // omitted: initialization of `CYCCNT`
+ fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
+ let mut dcb = cx.core.DCB;
+ let dwt = cx.core.DWT;
+ let systick = cx.core.SYST;
- foo::schedule(cx.start + PERIOD.cycles()).unwrap();
+ let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000);
- init::LateResources {}
+ foo::spawn_after(Seconds(1_u32)).unwrap();
+
+ (init::LateResources {}, init::Monotonics(mono))
}
#[task]
- fn foo(cx: foo::Context) {
- let now = Instant::now();
- hprintln!("foo(scheduled = {:?}, now = {:?})", cx.scheduled, now).unwrap();
-
- foo::schedule(cx.scheduled + PERIOD.cycles()).unwrap();
+ fn foo(_cx: foo::Context) {
+ // Periodic
+ foo::spawn_after(Seconds(1_u32)).unwrap();
}
}
diff --git a/examples/peripherals-taken.rs b/examples/peripherals-taken.rs
index 98f06b08..6b4a282b 100644
--- a/examples/peripherals-taken.rs
+++ b/examples/peripherals-taken.rs
@@ -10,10 +10,10 @@ mod app {
use cortex_m_semihosting::debug;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
assert!(cortex_m::Peripherals::take().is_none());
debug::exit(debug::EXIT_SUCCESS);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
}
diff --git a/examples/pool.rs b/examples/pool.rs
index eaad9c09..44405b49 100644
--- a/examples/pool.rs
+++ b/examples/pool.rs
@@ -25,7 +25,7 @@ mod app {
use super::P;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
static mut MEMORY: [u8; 512] = [0; 512];
// Increase the capacity of the memory pool by ~4
@@ -33,7 +33,7 @@ mod app {
rtic::pend(Interrupt::I2C0);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task(binds = I2C0, priority = 2)]
diff --git a/examples/preempt.rs b/examples/preempt.rs
index ee75c46f..14b3a0a6 100644
--- a/examples/preempt.rs
+++ b/examples/preempt.rs
@@ -12,10 +12,10 @@ mod app {
use lm3s6965::Interrupt;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::GPIOA);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task(binds = GPIOA, priority = 1)]
diff --git a/examples/ramfunc.rs b/examples/ramfunc.rs
index b5aa17b9..d9c8143f 100644
--- a/examples/ramfunc.rs
+++ b/examples/ramfunc.rs
@@ -19,10 +19,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn().unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[inline(never)]
diff --git a/examples/resource-user-struct.rs b/examples/resource-user-struct.rs
index a550bb2a..6ad540b0 100644
--- a/examples/resource-user-struct.rs
+++ b/examples/resource-user-struct.rs
@@ -27,11 +27,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
// `shared` cannot be accessed from this context
diff --git a/examples/resource.rs b/examples/resource.rs
index 60aa52b0..c8c57bf5 100644
--- a/examples/resource.rs
+++ b/examples/resource.rs
@@ -20,11 +20,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
// `shared` cannot be accessed from this context
diff --git a/examples/schedule.rs b/examples/schedule.rs
index 5f73c500..d6d44998 100644
--- a/examples/schedule.rs
+++ b/examples/schedule.rs
@@ -5,45 +5,47 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
// NOTE: does NOT work on QEMU!
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
- use cortex_m::peripheral::DWT;
use cortex_m_semihosting::hprintln;
- use rtic::cyccnt::{Instant, U32Ext as _};
+ use dwt_systick_monotonic::{
+ consts::{U0, U8},
+ DwtSystick,
+ };
+ use rtic::time::duration::Seconds;
+
+ #[monotonic(binds = SysTick, default = true)]
+ type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz
#[init()]
- fn init(mut cx: init::Context) -> init::LateResources {
- // Initialize (enable) the monotonic timer (CYCCNT)
- cx.core.DCB.enable_trace();
- // required on Cortex-M7 devices that software lock the DWT (e.g. STM32F7)
- DWT::unlock();
- cx.core.DWT.enable_cycle_counter();
+ fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
+ let mut dcb = cx.core.DCB;
+ let dwt = cx.core.DWT;
+ let systick = cx.core.SYST;
- // semantically, the monotonic timer is frozen at time "zero" during `init`
- // NOTE do *not* call `Instant::now` in this context; it will return a nonsense value
- let now = cx.start; // the start time of the system
+ let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000);
- hprintln!("init @ {:?}", now).unwrap();
+ hprintln!("init").unwrap();
- // Schedule `foo` to run 8e6 cycles (clock cycles) in the future
- foo::schedule(now + 8_000_000.cycles()).unwrap();
+ // Schedule `foo` to run 1 second in the future
+ foo::spawn_after(Seconds(1_u32)).unwrap();
- // Schedule `bar` to run 4e6 cycles in the future
- bar::schedule(now + 4_000_000.cycles()).unwrap();
+ // Schedule `bar` to run 2 seconds in the future
+ bar::spawn_after(Seconds(2_u32)).unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics(mono))
}
#[task]
fn foo(_: foo::Context) {
- hprintln!("foo @ {:?}", Instant::now()).unwrap();
+ hprintln!("foo").unwrap();
}
#[task]
fn bar(_: bar::Context) {
- hprintln!("bar @ {:?}", Instant::now()).unwrap();
+ hprintln!("bar").unwrap();
}
}
diff --git a/examples/spawn.rs b/examples/spawn.rs
index 449fcfb9..987ebf7d 100644
--- a/examples/spawn.rs
+++ b/examples/spawn.rs
@@ -12,10 +12,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_c: init::Context) -> init::LateResources {
+ fn init(_c: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn(1, 2).unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task()]
diff --git a/examples/spawn2.rs b/examples/spawn2.rs
index c485b922..be113f79 100644
--- a/examples/spawn2.rs
+++ b/examples/spawn2.rs
@@ -12,10 +12,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_c: init::Context) -> init::LateResources {
+ fn init(_c: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn(1, 2).unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task]
diff --git a/examples/static.rs b/examples/static.rs
index 7626c712..cbbc5399 100644
--- a/examples/static.rs
+++ b/examples/static.rs
@@ -26,13 +26,13 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
static mut Q: Queue<u32, U4> = Queue(i::Queue::new());
let (p, c) = Q.split();
// Initialization of late resources
- init::LateResources { p, c }
+ (init::LateResources { p, c }, init::Monotonics())
}
#[idle(resources = [c])]
diff --git a/examples/t-binds.rs b/examples/t-binds.rs
index 8d52f58a..fbc89e88 100644
--- a/examples/t-binds.rs
+++ b/examples/t-binds.rs
@@ -5,13 +5,13 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
#[rtic::app(device = lm3s6965)]
mod app {
#[init]
- fn init(_: init::Context) -> init::LateResources {
- init::LateResources {}
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
+ (init::LateResources {}, init::Monotonics())
}
// Cortex-M exception
diff --git a/examples/t-cfg-resources.rs b/examples/t-cfg-resources.rs
index 61eb4c7b..1adcb905 100644
--- a/examples/t-cfg-resources.rs
+++ b/examples/t-cfg-resources.rs
@@ -3,7 +3,7 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
#[rtic::app(device = lm3s6965)]
mod app {
@@ -18,13 +18,16 @@ mod app {
dummy: (), // dummy such that we have at least one late resource
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
- init::LateResources {
- // The feature needs to be applied everywhere x is defined or used
- #[cfg(feature = "feature_x")]
- x: 0,
- dummy: (), // dummy such that we have at least one late resource
- }
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
+ (
+ init::LateResources {
+ // The feature needs to be applied everywhere x is defined or used
+ #[cfg(feature = "feature_x")]
+ x: 0,
+ dummy: (), // dummy such that we have at least one late resource
+ },
+ init::Monotonics(),
+ )
}
#[idle]
diff --git a/examples/t-cfg.rs b/examples/t-cfg.rs
index 5bcef0af..ef591c4d 100644
--- a/examples/t-cfg.rs
+++ b/examples/t-cfg.rs
@@ -3,9 +3,9 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0, QEI0])]
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0, QEI0])]
mod app {
#[resources]
struct Resources {
@@ -15,11 +15,11 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
#[cfg(never)]
static mut BAR: u32 = 0;
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/t-htask-main.rs b/examples/t-htask-main.rs
index 57076eca..2d480d0b 100644
--- a/examples/t-htask-main.rs
+++ b/examples/t-htask-main.rs
@@ -10,10 +10,10 @@ mod app {
use cortex_m_semihosting::debug;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(lm3s6965::Interrupt::UART0);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task(binds = UART0)]
diff --git a/examples/t-idle-main.rs b/examples/t-idle-main.rs
index 42dac904..891896fa 100644
--- a/examples/t-idle-main.rs
+++ b/examples/t-idle-main.rs
@@ -10,8 +10,8 @@ mod app {
use cortex_m_semihosting::debug;
#[init]
- fn init(_: init::Context) -> init::LateResources {
- init::LateResources {}
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/t-init-main.rs b/examples/t-init-main.rs
index 0456e874..b77a7df8 100644
--- a/examples/t-init-main.rs
+++ b/examples/t-init-main.rs
@@ -10,9 +10,9 @@ mod app {
use cortex_m_semihosting::debug;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
debug::exit(debug::EXIT_SUCCESS);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
}
diff --git a/examples/t-late-not-send.rs b/examples/t-late-not-send.rs
index ce3bcbac..579f8436 100644
--- a/examples/t-late-not-send.rs
+++ b/examples/t-late-not-send.rs
@@ -5,7 +5,7 @@
use core::marker::PhantomData;
-use panic_halt as _;
+use panic_semihosting as _;
pub struct NotSend {
_0: PhantomData<*const ()>,
@@ -24,10 +24,13 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
- init::LateResources {
- x: NotSend { _0: PhantomData },
- }
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
+ (
+ init::LateResources {
+ x: NotSend { _0: PhantomData },
+ },
+ init::Monotonics(),
+ )
}
#[idle(resources = [x, y])]
diff --git a/examples/t-resource.rs b/examples/t-resource.rs
index 0a9f3bad..6e83069d 100644
--- a/examples/t-resource.rs
+++ b/examples/t-resource.rs
@@ -5,7 +5,7 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
#[rtic::app(device = lm3s6965)]
mod app {
@@ -32,8 +32,8 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
- init::LateResources {}
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
+ (init::LateResources {}, init::Monotonics())
}
#[idle(resources = [o2, &o4, s1, &s3])]
diff --git a/examples/t-schedule-core-stable.rs b/examples/t-schedule-core-stable.rs
index 10539014..98d42ce7 100644
--- a/examples/t-schedule-core-stable.rs
+++ b/examples/t-schedule-core-stable.rs
@@ -5,15 +5,15 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
#[init]
- fn init(c: init::Context) -> init::LateResources {
- let _c: rtic::Peripherals = c.core;
+ fn init(c: init::Context) -> (init::LateResources, init::Monotonics) {
+ let _c: cortex_m::Peripherals = c.core;
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task]
diff --git a/examples/t-schedule.rs b/examples/t-schedule.rs
index 9c94d1b4..bd0ab668 100644
--- a/examples/t-schedule.rs
+++ b/examples/t-schedule.rs
@@ -5,52 +5,47 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
-#[rtic::app(device = lm3s6965, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
+#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
- use rtic::cyccnt::{Instant, U32Ext as _};
+ use dwt_systick_monotonic::{
+ consts::{U0, U8},
+ DwtSystick,
+ };
+ use rtic::time::duration::Seconds;
+
+ #[monotonic(binds = SysTick, default = true)]
+ type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz
#[init]
- fn init(c: init::Context) -> init::LateResources {
- let _: Result<(), ()> = foo::schedule(c.start + 10.cycles());
- let _: Result<(), u32> = bar::schedule(c.start + 20.cycles(), 0);
- let _: Result<(), (u32, u32)> = baz::schedule(c.start + 30.cycles(), 0, 1);
+ fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
+ let mut dcb = cx.core.DCB;
+ let dwt = cx.core.DWT;
+ let systick = cx.core.SYST;
+
+ let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000);
- init::LateResources {}
+ let _: Result<(), ()> = foo::spawn_after(Seconds(1_u32));
+ let _: Result<(), u32> = bar::spawn_after(Seconds(2_u32), 0);
+ let _: Result<(), (u32, u32)> = baz::spawn_after(Seconds(3_u32), 0, 1);
+
+ (init::LateResources {}, init::Monotonics(mono))
}
#[idle]
fn idle(_: idle::Context) -> ! {
- let _: Result<(), ()> = foo::schedule(Instant::now() + 40.cycles());
- let _: Result<(), u32> = bar::schedule(Instant::now() + 50.cycles(), 0);
- let _: Result<(), (u32, u32)> = baz::schedule(Instant::now() + 60.cycles(), 0, 1);
+ let _: Result<(), ()> = foo::spawn_at(MyMono::now() + Seconds(3_u32));
+ let _: Result<(), u32> = bar::spawn_at(MyMono::now() + Seconds(4_u32), 0);
+ let _: Result<(), (u32, u32)> = baz::spawn_at(MyMono::now() + Seconds(5_u32), 0, 1);
loop {
cortex_m::asm::nop();
}
}
- #[task(binds = SVCall)]
- fn svcall(c: svcall::Context) {
- let _: Result<(), ()> = foo::schedule(c.start + 70.cycles());
- let _: Result<(), u32> = bar::schedule(c.start + 80.cycles(), 0);
- let _: Result<(), (u32, u32)> = baz::schedule(c.start + 90.cycles(), 0, 1);
- }
-
- #[task(binds = UART0)]
- fn uart0(c: uart0::Context) {
- let _: Result<(), ()> = foo::schedule(c.start + 100.cycles());
- let _: Result<(), u32> = bar::schedule(c.start + 110.cycles(), 0);
- let _: Result<(), (u32, u32)> = baz::schedule(c.start + 120.cycles(), 0, 1);
- }
-
#[task]
- fn foo(c: foo::Context) {
- let _: Result<(), ()> = foo::schedule(c.scheduled + 130.cycles());
- let _: Result<(), u32> = bar::schedule(c.scheduled + 140.cycles(), 0);
- let _: Result<(), (u32, u32)> = baz::schedule(c.scheduled + 150.cycles(), 0, 1);
- }
+ fn foo(_: foo::Context) {}
#[task]
fn bar(_: bar::Context, _x: u32) {}
diff --git a/examples/t-spawn.rs b/examples/t-spawn.rs
index c9949ef9..ca5c61b2 100644
--- a/examples/t-spawn.rs
+++ b/examples/t-spawn.rs
@@ -5,17 +5,17 @@
#![no_main]
#![no_std]
-use panic_halt as _;
+use panic_semihosting as _;
#[rtic::app(device = lm3s6965, dispatchers = [SSI0])]
mod app {
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
let _: Result<(), ()> = foo::spawn();
let _: Result<(), u32> = bar::spawn(0);
let _: Result<(), (u32, u32)> = baz::spawn(0, 1);
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[idle]
diff --git a/examples/t-stask-main.rs b/examples/t-stask-main.rs
index 034ad7c5..cfc93425 100644
--- a/examples/t-stask-main.rs
+++ b/examples/t-stask-main.rs
@@ -10,10 +10,10 @@ mod app {
use cortex_m_semihosting::debug;
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
taskmain::spawn().ok();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task]
diff --git a/examples/task-local-minimal.rs b/examples/task-local-minimal.rs
index 6e25c10d..f83493c2 100644
--- a/examples/task-local-minimal.rs
+++ b/examples/task-local-minimal.rs
@@ -18,8 +18,8 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
- init::LateResources { l: 42 }
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
+ (init::LateResources { l: 42 }, init::Monotonics())
}
// l is task_local
diff --git a/examples/task-local.rs b/examples/task-local.rs
index e86197a0..3020c3b3 100644
--- a/examples/task-local.rs
+++ b/examples/task-local.rs
@@ -38,10 +38,10 @@ mod app {
}
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
rtic::pend(Interrupt::UART0);
rtic::pend(Interrupt::UART1);
- init::LateResources { e2: 2, l2: 2 }
+ (init::LateResources { e2: 2, l2: 2 }, init::Monotonics())
}
// `shared` cannot be accessed from this context
diff --git a/examples/task.rs b/examples/task.rs
index 5e4769a5..9d4492f2 100644
--- a/examples/task.rs
+++ b/examples/task.rs
@@ -12,10 +12,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
foo::spawn().unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task]
diff --git a/examples/task_named_main.rs b/examples/task_named_main.rs
index c3d21b58..c2c4e62d 100644
--- a/examples/task_named_main.rs
+++ b/examples/task_named_main.rs
@@ -12,10 +12,10 @@ mod app {
use cortex_m_semihosting::{debug, hprintln};
#[init]
- fn init(_: init::Context) -> init::LateResources {
+ fn init(_: init::Context) -> (init::LateResources, init::Monotonics) {
main::spawn().unwrap();
- init::LateResources {}
+ (init::LateResources {}, init::Monotonics())
}
#[task]
diff --git a/examples/types.rs b/examples/types.rs
index bcdd30a9..ff7deb84 100644
--- a/examples/types.rs
+++ b/examples/types.rs
@@ -7,10 +7,16 @@
use panic_semihosting as _;
-#[rtic::app(device = lm3s6965, peripherals = true, monotonic = rtic::cyccnt::CYCCNT, dispatchers = [SSI0])]
+#[rtic::app(device = lm3s6965, peripherals = true, dispatchers = [SSI0])]
mod app {
use cortex_m_semihosting::debug;
- use rtic::cyccnt;
+ use dwt_systick_monotonic::{
+ consts::{U0, U8},
+ DwtSystick,
+ };
+
+ #[monotonic(binds = SysTick, default = true)]
+ type MyMono = DwtSystick<U8, U0, U0>; // 8 MHz
#[resources]
struct Resources {
@@ -19,14 +25,19 @@ mod app {
}
#[init]
- fn init(cx: init::Context) -> init::LateResources {
- let _: cyccnt::Instant = cx.start;
- let _: rtic::Peripherals = cx.core;
+ fn init(cx: init::Context) -> (init::LateResources, init::Monotonics) {
+ let _: cortex_m::Peripherals = cx.core;
let _: lm3s6965::Peripherals = cx.device;
debug::exit(debug::EXIT_SUCCESS);
- init::LateResources {}
+ let mut dcb = cx.core.DCB;
+ let dwt = cx.core.DWT;
+ let systick = cx.core.SYST;
+
+ let mono = DwtSystick::new(&mut dcb, dwt, systick, 8_000_000);
+
+ (init::LateResources {}, init::Monotonics(mono))
}
#[idle]
@@ -38,13 +49,11 @@ mod app {
#[task(binds = UART0, resources = [shared])]
fn uart0(cx: uart0::Context) {
- let _: cyccnt::Instant = cx.start;
let _: resources::shared = cx.resources.shared;
}
#[task(priority = 2, resources = [shared])]
fn foo(cx: foo::Context) {
- let _: cyccnt::Instant = cx.scheduled;
let _: resources::shared = cx.resources.shared;
let _: foo::Resources = cx.resources;
}