commit:0e1d985ec333bbdf5292651db8da7d49f38b1304
author:Chip
committer:Chip
date:Wed Mar 13 20:44:39 2019 -0500
parents:79df27da09d3f9f6f9147370689ee4cae3688473
Support formatted panic messages
diff --git a/src/main.rs b/src/main.rs
line changes: +1/-0
index 603ab36..798eea3
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,6 +7,7 @@
 #![feature(asm)]
 #![feature(const_vec_new)]
 #![feature(const_fn)]
+#![feature(panic_info_message)]
 
 use cortex_m_rt::{entry, pre_init};
 use embedded_hal::watchdog::WatchdogDisable; // REMOVE when embedded-hal watchdog is finalized

diff --git a/src/panic.rs b/src/panic.rs
line changes: +17/-9
index 412d7e0..34c77f4
--- a/src/panic.rs
+++ b/src/panic.rs
@@ -1,4 +1,6 @@
+extern crate alloc;
 use core::panic::PanicInfo;
+use core::fmt;
 use crate::serial_console::get_global_console;
 use crate::console::ConsoleOutput;
 use crate::util::print_dec;
@@ -6,15 +8,21 @@ use crate::util::print_dec;
 #[panic_handler]
 fn panic(info: &PanicInfo) -> ! {
     // Boy if we panic before the console is up, we're just SOL.
-    let console = get_global_console();
+    let mut console = get_global_console();
 
-    console.write("PANIC!\r\n");
+    console.write("PANIC!\n");
 
-    match info.payload().downcast_ref::<&str>() {
-        Some(p) => console.write(p),
-        None => console.write("no payload"),
-    };
-    console.write("\r\n");
+    if let Some(p) = info.payload().downcast_ref::<&str>() {
+        console.write(p);
+    } else if let Some(m) = info.message() {
+        match fmt::write(&mut console, *m) {
+            Ok(_) => (),
+            Err(_) => console.write("Error formatting panic message"),
+        };
+    } else {
+        console.write("no payload");
+    }
+    console.write("\n");
 
     if let Some(location) = info.location() {
         console.write("at ");
@@ -23,9 +31,9 @@ fn panic(info: &PanicInfo) -> ! {
         print_dec(location.line());
         console.write(":");
         print_dec(location.column());
-        console.write("\r\n");
+        console.write("\n");
     } else {
-        console.write("Unknown location\r\n");
+        console.write("Unknown location\n");
     }
 
     loop{}