diff --git a/examples/resource.rs b/examples/resource.rs index 3fced4cffa2d676b2460d00f17ad2fd3a52282e0..ad91efb4575102bc5a708641919cc4db997fb0e5 100644 --- a/examples/resource.rs +++ b/examples/resource.rs @@ -2,6 +2,7 @@ //#![deny(unsafe_code)] // IMPORTANT always include this feature gate #![feature(proc_macro)] +#![feature(used)] #![no_std] extern crate cortex_m_rtfm as rtfm; @@ -56,6 +57,7 @@ fn exti1(t: &mut Threshold, EXTI1::Resources { X, mut Y }: EXTI1::Resources) { } }); }); + rtfm::bkpt(); } fn exti2(t: &mut Threshold, mut r: EXTI2::Resources) { @@ -74,14 +76,54 @@ fn exti3(_t: &mut Threshold, _r: EXTI3::Resources) {} #[allow(dead_code)] fn init(_p: init::Peripherals, _r: init::Resources) {} +extern crate cortex_m; +use cortex_m::register::basepri; + +// for wcet should be autogenerated... +#[inline(never)] +fn readbasepri() -> u8 { + cortex_m::register::basepri::read() +} + // The idle loop. // // This runs after `init` and has a priority of 0. All tasks can preempt this // function. This function can never return so it must contain some sort of // endless loop. +#[inline(never)] +#[allow(non_snake_case)] +#[no_mangle] +fn stub_EXTI1() { + unsafe { _EXTI1() }; +} +#[inline(never)] +#[no_mangle] +#[allow(non_snake_case)] +fn stub_EXTI2() { + unsafe { _EXTI2() }; +} +#[inline(never)] +#[no_mangle] +#[allow(non_snake_case)] +fn stub_EXTI3() { + unsafe { + _EXTI3(); + } +} #[inline(never)] -#[allow(dead_code)] fn idle() -> ! { - loop {} + readbasepri(); + stub_EXTI1(); + stub_EXTI1(); + stub_EXTI1(); + + loop { + rtfm::nop(); + } } + +// +//0x80001dc 0x80001dc <cortex_m_rt::reset_handler+4> +//0x8000270 0x8000270 <resource::init> +//0x8000284 0x8000284 <resource::idle+10>