Make defmt optional with new anyfmt crate

This commit is contained in:
Dario Nieuwenhuis
2020-11-01 17:17:24 +01:00
parent 2c13e25184
commit 5e8608c7a5
29 changed files with 267 additions and 233 deletions

View File

@ -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"}
cortex-m-rtic = { git = "https://github.com/rtic-rs/cortex-m-rtic", branch = "master"}

View File

@ -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<Executor> = 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();

View File

@ -120,7 +120,7 @@ static EXECUTOR_HIGH: Forever<TimerExecutor<rtc::Alarm<pac::RTC1>>> = 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();

View File

@ -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<Executor> = 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();

View File

@ -39,7 +39,7 @@ static EXECUTOR: Forever<TimerExecutor<rtc::Alarm<pac::RTC1>>> = 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();

View File

@ -18,7 +18,7 @@ static mut RTC: MaybeUninit<rtc::RTC<embassy_nrf::pac::RTC1>> = 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()

View File

@ -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<Executor> = 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();

View File

@ -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<T> {
/// dewrap = defmt unwrap
fn dewrap(self) -> T;
/// dexpect = defmt expect
fn dexpect<M: defmt::Format>(self, msg: M) -> T;
}
impl<T> Dewrap<T> for Option<T> {
fn dewrap(self) -> T {
match self {
Some(t) => t,
None => depanic!("Dewrap failed: enum is none"),
}
}
fn dexpect<M: defmt::Format>(self, msg: M) -> T {
match self {
Some(t) => t,
None => depanic!("Unexpected None: {:?}", msg),
}
}
}
impl<T, E: defmt::Format> Dewrap<T> for Result<T, E> {
fn dewrap(self) -> T {
match self {
Ok(t) => t,
Err(e) => depanic!("Dewrap failed: {:?}", e),
}
}
fn dexpect<M: defmt::Format>(self, msg: M) -> T {
match self {
Ok(t) => t,
Err(e) => depanic!("Unexpected error: {:?}: {:?}", msg, e),
}
}
}