diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/schedule.rs | 7 | ||||
| -rw-r--r-- | examples/t-cfg-resources.rs | 36 |
2 files changed, 41 insertions, 2 deletions
diff --git a/examples/schedule.rs b/examples/schedule.rs index 97818e3..d5de9db 100644 --- a/examples/schedule.rs +++ b/examples/schedule.rs @@ -1,9 +1,11 @@ //! examples/schedule.rs +#![deny(unsafe_code)] #![deny(warnings)] #![no_main] #![no_std] +use cortex_m::peripheral::DWT; use cortex_m_semihosting::hprintln; use panic_halt as _; use rtfm::cyccnt::{Instant, U32Ext as _}; @@ -15,11 +17,12 @@ const APP: () = { fn init(mut cx: init::Context) { // Initialize (enable) the monotonic timer (CYCCNT) cx.core.DCB.enable_trace(); - // required on devices that software lock the DWT (e.g. STM32F7) - unsafe { cx.core.DWT.lar.write(0xC5ACCE55) } + // required on Cortex-M7 devices that software lock the DWT (e.g. STM32F7) + DWT::unlock(); cx.core.DWT.enable_cycle_counter(); // 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 hprintln!("init @ {:?}", now).unwrap(); diff --git a/examples/t-cfg-resources.rs b/examples/t-cfg-resources.rs new file mode 100644 index 0000000..a8efe79 --- /dev/null +++ b/examples/t-cfg-resources.rs @@ -0,0 +1,36 @@ +//! [compile-pass] check that `#[cfg]` attributes applied on resources work +//! +#![no_main] +#![no_std] + +use panic_halt as _; + +#[rtfm::app(device = lm3s6965)] +const APP: () = { + struct Resources { + // A resource + #[init(0)] + shared: u32, + + // A conditionally compiled resource behind feature_x + #[cfg(feature = "feature_x")] + x: u32, + + dummy: (), + } + + #[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 + } + } + + #[idle] + fn idle(_cx: idle::Context) -> ! { + loop {} + } +}; |
