nihpod/demo/src/panique.rs

42 lines
1.1 KiB
Rust

use core::panic::PanicInfo;
use core::fmt::Write;
use crate::console::Console;
use nano5g::lcd::{LCD, Display};
use s5l87xx::Peripherals;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
let periphs = unsafe { Peripherals::steal() };
let lcd = LCD::new(periphs.LCD);
let mut display = Display::new(lcd);
let mut console = Console::<{240/6}, {320/14}>::new();
console.write_str("Panic!\n");
console.blit(&mut display);
display.flush();
if let Some(s) = info.payload().downcast_ref::<&str>() {
core::fmt::write(&mut console, format_args!(
"Payload: {:?}\n", s,
));
} else if let Some(a) = info.message() {
console.write_str("Message: ");
core::fmt::write(&mut console, *a);
console.write_str("\n");
}
console.blit(&mut display);
display.flush();
if let Some(location) = info.location() {
core::fmt::write(&mut console, format_args!("In {}:{}\n", location.file(), location.line()));
} else {
console.write_str("No location information.\n");
}
console.blit(&mut display);
display.flush();
loop {}
}