From 5e8608c7a5b1e4e92f1fb650ea0ef47e5a6df563 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Sun, 1 Nov 2020 17:17:24 +0100 Subject: Make defmt optional with new `anyfmt` crate --- examples/Cargo.toml | 13 ++++++----- examples/src/bin/gpiote.rs | 22 ++++++------------ examples/src/bin/multiprio.rs | 16 ++++++++----- examples/src/bin/qspi.rs | 7 +++--- examples/src/bin/rtc_async.rs | 6 ++--- examples/src/bin/rtc_raw.rs | 2 +- examples/src/bin/uart.rs | 12 +++++----- examples/src/example_common.rs | 51 +----------------------------------------- 8 files changed, 40 insertions(+), 89 deletions(-) (limited to 'examples') diff --git a/examples/Cargo.toml b/examples/Cargo.toml index 8eb7a5ff7..719f73269 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -17,14 +17,17 @@ defmt-error = [] [dependencies] +embassy = { version = "0.1.0", path = "../embassy", features = ["defmt"] } +embassy-nrf = { version = "0.1.0", path = "../embassy-nrf", features = ["defmt", "defmt-trace", "52840"] } +anyfmt = { version = "0.1.0", path = "../anyfmt", features = ["defmt"] } + +defmt = "0.1.0" +defmt-rtt = "0.1.0" + cortex-m = { version = "0.6.3" } cortex-m-rt = "0.6.12" -defmt = "0.1.0" embedded-hal = { version = "0.2.4" } -defmt-rtt = "0.1.0" panic-probe = "0.1.0" nrf52840-hal = { version = "0.11.0" } -embassy = { version = "0.1.0", path = "../embassy" } -embassy-nrf = { version = "0.1.0", path = "../embassy-nrf", features = ["defmt-trace", "52840"] } futures = { version = "0.3.7", default-features = false, features = ["async-await"] } -cortex-m-rtic = { git = "https://github.com/rtic-rs/cortex-m-rtic", branch = "master"} \ No newline at end of file +cortex-m-rtic = { git = "https://github.com/rtic-rs/cortex-m-rtic", branch = "master"} diff --git a/examples/src/bin/gpiote.rs b/examples/src/bin/gpiote.rs index 16b4f06d7..d8394155d 100644 --- a/examples/src/bin/gpiote.rs +++ b/examples/src/bin/gpiote.rs @@ -15,7 +15,7 @@ use embassy_nrf::gpiote; #[task] async fn run() { - let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let p = unwrap!(embassy_nrf::pac::Peripherals::take()); let port0 = gpio::p0::Parts::new(p.P0); let g = gpiote::Gpiote::new(p.GPIOTE); @@ -24,9 +24,7 @@ async fn run() { let pin1 = port0.p0_11.into_pullup_input().degrade(); let button1 = async { - let ch = g - .new_input_channel(pin1, gpiote::EventPolarity::HiToLo) - .dewrap(); + let ch = unwrap!(g.new_input_channel(pin1, gpiote::EventPolarity::HiToLo)); loop { ch.wait().await; @@ -36,9 +34,7 @@ async fn run() { let pin2 = port0.p0_12.into_pullup_input().degrade(); let button2 = async { - let ch = g - .new_input_channel(pin2, gpiote::EventPolarity::LoToHi) - .dewrap(); + let ch = unwrap!(g.new_input_channel(pin2, gpiote::EventPolarity::LoToHi)); loop { ch.wait().await; @@ -48,9 +44,7 @@ async fn run() { let pin3 = port0.p0_24.into_pullup_input().degrade(); let button3 = async { - let ch = g - .new_input_channel(pin3, gpiote::EventPolarity::Toggle) - .dewrap(); + let ch = unwrap!(g.new_input_channel(pin3, gpiote::EventPolarity::Toggle)); loop { ch.wait().await; @@ -60,9 +54,7 @@ async fn run() { let pin4 = port0.p0_25.into_pullup_input().degrade(); let button4 = async { - let ch = g - .new_input_channel(pin4, gpiote::EventPolarity::Toggle) - .dewrap(); + let ch = unwrap!(g.new_input_channel(pin4, gpiote::EventPolarity::Toggle)); loop { ch.wait().await; @@ -79,8 +71,8 @@ static EXECUTOR: Forever = Forever::new(); fn main() -> ! { info!("Hello World!"); - let executor = EXECUTOR.put(Executor::new(cortex_m::asm::wfi)); - executor.spawn(run()).dewrap(); + let executor = EXECUTOR.put(Executor::new(cortex_m::asm::sev)); + unwrap!(executor.spawn(run())); loop { executor.run(); diff --git a/examples/src/bin/multiprio.rs b/examples/src/bin/multiprio.rs index dbca491e0..e73747ac6 100644 --- a/examples/src/bin/multiprio.rs +++ b/examples/src/bin/multiprio.rs @@ -120,7 +120,7 @@ static EXECUTOR_HIGH: Forever>> = Forever::n fn main() -> ! { info!("Hello World!"); - let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let p = unwrap!(embassy_nrf::pac::Peripherals::take()); clocks::Clocks::new(p.CLOCK) .enable_ext_hfosc() @@ -132,17 +132,21 @@ fn main() -> ! { unsafe { embassy::time::set_clock(rtc) }; let executor_low = EXECUTOR_LOW.put(TimerExecutor::new(rtc.alarm0(), cortex_m::asm::sev)); - let executor_med = EXECUTOR_MED.put(TimerExecutor::new(rtc.alarm1(), cortex_m::asm::sev)); - let executor_high = EXECUTOR_HIGH.put(TimerExecutor::new(rtc.alarm2(), cortex_m::asm::sev)); + let executor_med = EXECUTOR_MED.put(TimerExecutor::new(rtc.alarm1(), || { + interrupt::pend(interrupt::SWI0_EGU0) + })); + let executor_high = EXECUTOR_HIGH.put(TimerExecutor::new(rtc.alarm2(), || { + interrupt::pend(interrupt::SWI1_EGU1) + })); interrupt::set_priority(interrupt::SWI0_EGU0, interrupt::Priority::Level7); interrupt::set_priority(interrupt::SWI1_EGU1, interrupt::Priority::Level6); interrupt::enable(interrupt::SWI0_EGU0); interrupt::enable(interrupt::SWI1_EGU1); - executor_low.spawn(run_low()).dewrap(); - executor_med.spawn(run_med()).dewrap(); - executor_high.spawn(run_high()).dewrap(); + unwrap!(executor_low.spawn(run_low())); + unwrap!(executor_med.spawn(run_med())); + unwrap!(executor_high.spawn(run_high())); loop { executor_low.run(); diff --git a/examples/src/bin/qspi.rs b/examples/src/bin/qspi.rs index caabac8ba..a7f668ca7 100644 --- a/examples/src/bin/qspi.rs +++ b/examples/src/bin/qspi.rs @@ -6,6 +6,7 @@ mod example_common; use example_common::*; +use anyfmt::panic; use cortex_m_rt::entry; use nrf52840_hal::gpio; @@ -23,7 +24,7 @@ struct AlignedBuf([u8; 4096]); #[task] async fn run() { - let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let p = unwrap!(embassy_nrf::pac::Peripherals::take()); let port0 = gpio::p0::Parts::new(p.P0); @@ -121,8 +122,8 @@ static EXECUTOR: Forever = Forever::new(); fn main() -> ! { info!("Hello World!"); - let executor = EXECUTOR.put(Executor::new(cortex_m::asm::wfi)); - executor.spawn(run()).dewrap(); + let executor = EXECUTOR.put(Executor::new(cortex_m::asm::sev)); + unwrap!(executor.spawn(run())); loop { executor.run(); diff --git a/examples/src/bin/rtc_async.rs b/examples/src/bin/rtc_async.rs index 5126a2cc8..b4ee736b7 100644 --- a/examples/src/bin/rtc_async.rs +++ b/examples/src/bin/rtc_async.rs @@ -39,7 +39,7 @@ static EXECUTOR: Forever>> = Forever::new(); fn main() -> ! { info!("Hello World!"); - let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let p = unwrap!(embassy_nrf::pac::Peripherals::take()); clocks::Clocks::new(p.CLOCK) .enable_ext_hfosc() @@ -53,8 +53,8 @@ fn main() -> ! { let executor = EXECUTOR.put(TimerExecutor::new(rtc.alarm0(), cortex_m::asm::sev)); - executor.spawn(run1()).dewrap(); - executor.spawn(run2()).dewrap(); + unwrap!(executor.spawn(run1())); + unwrap!(executor.spawn(run2())); loop { executor.run(); diff --git a/examples/src/bin/rtc_raw.rs b/examples/src/bin/rtc_raw.rs index 4453ecae1..ad5fab246 100644 --- a/examples/src/bin/rtc_raw.rs +++ b/examples/src/bin/rtc_raw.rs @@ -18,7 +18,7 @@ static mut RTC: MaybeUninit> = MaybeUninit::uni fn main() -> ! { info!("Hello World!"); - let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let p = unwrap!(embassy_nrf::pac::Peripherals::take()); clocks::Clocks::new(p.CLOCK) .enable_ext_hfosc() diff --git a/examples/src/bin/uart.rs b/examples/src/bin/uart.rs index eeaf5fee6..553bbb356 100644 --- a/examples/src/bin/uart.rs +++ b/examples/src/bin/uart.rs @@ -17,7 +17,7 @@ use embassy_nrf::uarte; #[task] async fn run() { - let p = embassy_nrf::pac::Peripherals::take().dewrap(); + let p = unwrap!(embassy_nrf::pac::Peripherals::take()); let port0 = gpio::p0::Parts::new(p.P0); @@ -41,14 +41,14 @@ async fn run() { info!("uarte initialized!"); - u.write_all(b"Hello!\r\n").await.dewrap(); + unwrap!(u.write_all(b"Hello!\r\n").await); info!("wrote hello in uart!"); // Simple demo, reading 8-char chunks and echoing them back reversed. loop { info!("reading..."); let mut buf = [0u8; 8]; - u.read_exact(&mut buf).await.dewrap(); + unwrap!(u.read_exact(&mut buf).await); info!("read done, got {:[u8]}", buf); // Reverse buf @@ -59,7 +59,7 @@ async fn run() { } info!("writing..."); - u.write_all(&buf).await.dewrap(); + unwrap!(u.write_all(&buf).await); info!("write done"); } } @@ -70,8 +70,8 @@ static EXECUTOR: Forever = Forever::new(); fn main() -> ! { info!("Hello World!"); - let executor = EXECUTOR.put(Executor::new(cortex_m::asm::wfi)); - executor.spawn(run()).dewrap(); + let executor = EXECUTOR.put(Executor::new(cortex_m::asm::sev)); + unwrap!(executor.spawn(run())); loop { executor.run(); diff --git a/examples/src/example_common.rs b/examples/src/example_common.rs index 65bfe6bb1..1a12fa69a 100644 --- a/examples/src/example_common.rs +++ b/examples/src/example_common.rs @@ -4,7 +4,7 @@ use defmt_rtt as _; // global logger use nrf52840_hal as _; use panic_probe as _; -pub use defmt::{info, intern}; +pub use anyfmt::*; use core::sync::atomic::{AtomicUsize, Ordering}; @@ -16,52 +16,3 @@ fn timestamp() -> u64 { COUNT.store(n + 1, Ordering::Relaxed); n as u64 } - -macro_rules! depanic { - ($( $i:expr ),*) => { - { - defmt::error!($( $i ),*); - panic!(); - } - } -} - -pub trait Dewrap { - /// dewrap = defmt unwrap - fn dewrap(self) -> T; - - /// dexpect = defmt expect - fn dexpect(self, msg: M) -> T; -} - -impl Dewrap for Option { - fn dewrap(self) -> T { - match self { - Some(t) => t, - None => depanic!("Dewrap failed: enum is none"), - } - } - - fn dexpect(self, msg: M) -> T { - match self { - Some(t) => t, - None => depanic!("Unexpected None: {:?}", msg), - } - } -} - -impl Dewrap for Result { - fn dewrap(self) -> T { - match self { - Ok(t) => t, - Err(e) => depanic!("Dewrap failed: {:?}", e), - } - } - - fn dexpect(self, msg: M) -> T { - match self { - Ok(t) => t, - Err(e) => depanic!("Unexpected error: {:?}: {:?}", msg, e), - } - } -} -- cgit