diff --git a/Cargo.lock b/Cargo.lock index 4dddcb0..16ec191 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,7 +32,6 @@ dependencies = [ "arduino-hal", "embedded-hal 1.0.0", "nb 1.1.0", - "panic-serial", "proc-macro2", "ufmt", ] @@ -141,15 +140,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" -[[package]] -name = "panic-serial" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3afc60d58b0825ea32dd8d8a2796098f7b87ad3b9392cace3b6dc79e450afd9" -dependencies = [ - "ufmt", -] - [[package]] name = "paste" version = "1.0.15" diff --git a/Cargo.toml b/Cargo.toml index db67986..db7d960 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ bench = false ufmt = "0.2.0" nb = "1.1.0" embedded-hal = "1.0" -panic-serial = { version = "0.1.2", features = ["full"] } [dependencies.arduino-hal] git = "https://github.com/rahix/avr-hal" diff --git a/src/main.rs b/src/main.rs index 61f4816..3fd840d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,13 +3,38 @@ use arduino_hal::prelude::*; -panic_serial::impl_panic_handler!( - arduino_hal::usart::Usart< - arduino_hal::pac::USART0, - arduino_hal::port::Pin, - arduino_hal::port::Pin - > -); +// NOTE: 115200 @ 16MHz is 3.5% off, try 9600 or 1M if it causes issues (https://wormfood.net/avrbaudcalc.php) +const SERIAL_BAUD: u32 = 115200; + +#[cfg(not(doc))] +#[panic_handler] +fn panic(info: &core::panic::PanicInfo) -> ! { + // disable interrupts - firmware has panicked so no ISRs should continue running + // avr_device::interrupt::disable(); + + // SAFETY: Main code aborted. + let dp = unsafe { arduino_hal::Peripherals::steal() }; + let pins = arduino_hal::pins!(dp); + let mut serial = arduino_hal::default_serial!(dp, pins, SERIAL_BAUD); + + ufmt::uwriteln!(&mut serial, "Firmware panic!\r").unwrap_infallible(); + if let Some(loc) = info.location() { + ufmt::uwriteln!( + &mut serial, + " At {}:{}:{}\r", + loc.file(), + loc.line(), + loc.column(), + ) + .unwrap_infallible(); + } + + let mut led = pins.d13.into_output(); + loop { + led.toggle(); + arduino_hal::delay_ms(100); + } +} #[arduino_hal::entry] fn main() -> ! { @@ -17,9 +42,7 @@ fn main() -> ! { let pins = arduino_hal::pins!(dp); let mut led = pins.d13.into_output(); - // NOTE: 115200 @ 16MHz is 3.5% off, try 9600 or 1M if it causes issues (https://wormfood.net/avrbaudcalc.php) - let serial = arduino_hal::default_serial!(dp, pins, 115200); - let mut serial = share_serial_port_with_panic(serial); + let mut serial = arduino_hal::default_serial!(dp, pins, SERIAL_BAUD); ufmt::uwriteln!(&mut serial, "Hello from Arduino!").unwrap_infallible();