commit:308038e4db43a5a0d85aeb6965e33634e9fd4e2e
author:Chip
committer:Chip
date:Wed Mar 13 22:05:13 2019 -0500
parents:bbb9fc3e90771efa3dd6cd37801b54f2f213664d
Rewrite fault handler to use format routines
diff --git a/src/fault.rs b/src/fault.rs
line changes: +31/-60
index d223b76..48e8635
--- a/src/fault.rs
+++ b/src/fault.rs
@@ -1,3 +1,4 @@
+use core::fmt::Write;
 use cortex_m;
 use cortex_m_rt::exception;
 use cortex_m_rt::ExceptionFrame;
@@ -8,88 +9,60 @@ use crate::util::print_hex_padded;
 fn print_exception_frame(ef: &ExceptionFrame) {
     let console = get_global_console();
 
-    console.write("PC: ");
-    print_hex_padded(ef.pc, 8);
-    console.write("\r\n");
-
-    console.write("LR: ");
-    print_hex_padded(ef.lr, 8);
-    console.write("\r\n");
-
-    console.write("XPSR: ");
-    print_hex_padded(ef.xpsr, 8);
-    console.write("\r\n");
-
-    console.write("R0: ");
-    print_hex_padded(ef.r0, 8);
-    console.write("\r\n");
-
-    console.write("R1: ");
-    print_hex_padded(ef.r1, 8);
-    console.write("\r\n");
-
-    console.write("R2: ");
-    print_hex_padded(ef.r2, 8);
-    console.write("\r\n");
-
-    console.write("R3: ");
-    print_hex_padded(ef.r3, 8);
-    console.write("\r\n");
-
-    console.write("IP: ");
-    print_hex_padded(ef.r12, 8);
-    console.write("\r\n");
+    write!(console, "PC: {:08X}\n", ef.pc).unwrap();
+    write!(console, "LR: {:08X}\n", ef.lr).unwrap();
+    write!(console, "XPSR: {:08X}\n", ef.xpsr).unwrap();
+    write!(console, "R0: {:08X}\n", ef.r0).unwrap();
+    write!(console, "R1: {:08X}\n", ef.r1).unwrap();
+    write!(console, "R2: {:08X}\n", ef.r2).unwrap();
+    write!(console, "R3: {:08X}\n", ef.r3).unwrap();
+    write!(console, "IP: {:08X}\n", ef.r12).unwrap();
 }
 
 unsafe fn print_stack(ef: &ExceptionFrame) {
     let console = get_global_console();
     let sp = ef as *const ExceptionFrame as *const u32;
 
-    console.write("SP: ");
-    print_hex_padded(sp as u32, 8);
-    console.write("\r\n");
+    write!(console, "SP: {:08X}\n", sp as u32).unwrap();
 
     for i in 0..4 {
-        print_hex_padded((sp as u32) + i * 32, 8);
-        console.write(": ");
+        write!(console, "{:08X}:", (sp as u32) + i * 32).unwrap();
         for j in 0..8 {
-            print_hex_padded(*sp.offset((i * 8 + j) as isize), 8);
-            console.write(" ");
+            let d = *sp.offset((i * 8 + j) as isize);
+            write!(console, " {:08X}", d).unwrap();
         }
-        console.write("\r\n");
+        console.write("\n");
     }
 }
 
 #[exception]
 unsafe fn HardFault(ef: &ExceptionFrame) -> ! {
     let console = get_global_console();
-    console.write("\r\nHardFault!\r\n");
+    console.write("\nHardFault!\n");
     print_exception_frame(ef);
-    console.write("\r\n");
+    console.write("\n");
 
     print_stack(ef);
-    console.write("\r\n");
+    console.write("\n");
 
     let scb = &(*cortex_m::peripheral::SCB::ptr());
 
     let hfsr = scb.hfsr.read();
-    console.write("HFSR: ");
-    print_hex_padded(hfsr, 8);
+    write!(console, "HFSR: {:08X}", hfsr).unwrap();
     if hfsr & 0x00000002 != 0 {
         console.write(" VECTBL");
     }
     if hfsr & 0x40000000 != 0 {
         console.write(" FORCED");
     }
-    console.write("\r\n");
+    console.write("\n");
 
     if hfsr & 0x40000000 != 0 {
         // read all the other fault regs
         let cfsr = scb.cfsr.read();
 
         let mmfsr = (cfsr & 0xFF) as u8;
-        console.write("MMFSR: ");
-        print_hex_padded(mmfsr, 8);
+        write!(console, "MMFSR: {:08X}", mmfsr).unwrap();
         if mmfsr & 0x01 != 0 {
             console.write(" IACCVIOL");
         }
@@ -102,19 +75,18 @@ unsafe fn HardFault(ef: &ExceptionFrame) -> ! {
         if mmfsr & 0x10 != 0 {
             console.write(" MSTKERR");
         }
-        console.write("\r\n");
+        console.write("\n");
 
         if mmfsr & 0x80 != 0 {
-            console.write("MMFAR: ");
-            print_hex_padded(scb.mmfar.read(), 8);
+            let mmfar = scb.mmfar.read();
+            write!(console, "MMFAR: {:08X}", mmfar).unwrap();
         } else {
             console.write("MMFAR invalid");
         }
-        console.write("\r\n");
+        console.write("\n");
 
         let bfsr = ((cfsr & 0xFF00) >> 8) as u8;
-        console.write("BFSR: ");
-        print_hex_padded(bfsr, 2);
+        write!(console, "BFSR: {:02X}", bfsr).unwrap();
         if bfsr & 0x01 != 0 {
             console.write(" IBUSERR");
         }
@@ -130,19 +102,18 @@ unsafe fn HardFault(ef: &ExceptionFrame) -> ! {
         if bfsr & 0x10 != 0 {
             console.write(" STKERR");
         }
-        console.write("\r\n");
+        console.write("\n");
 
         if bfsr & 0x80 != 0 {
-            console.write("BFAR: ");
-            print_hex_padded(scb.bfar.read(), 8);
+            let bfar = scb.bfar.read();
+            write!(console, "BFAR: {:08X}", bfar).unwrap();
         } else {
             console.write("BFAR invalid");
         }
-        console.write("\r\n");
+        console.write("\n");
 
         let ufsr = ((cfsr & 0xFFFF0000) >> 16) as u16;
-        console.write("UFSR: ");
-        print_hex_padded(ufsr, 4);
+        write!(console, "UFSR: {:04X}", ufsr).unwrap();
         if ufsr & 0x0001 != 0 {
             console.write(" UNDEFINSTR");
         }
@@ -161,7 +132,7 @@ unsafe fn HardFault(ef: &ExceptionFrame) -> ! {
         if ufsr & 0x0200 != 0 {
             console.write(" DIVBYZERO");
         }
-        console.write("\r\n");
+        console.write("\n");
     }
 
     loop {}