Make defmt optional with new anyfmt
crate
This commit is contained in:
@ -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"}
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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()
|
||||
|
@ -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();
|
||||
|
@ -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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user