]> code.bitgloo.com Git - clyne/stmdsp.git/commitdiff
recover from custom code faults
authorClyne Sullivan <clyne@bitgloo.com>
Wed, 2 Sep 2020 00:13:38 +0000 (20:13 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Wed, 2 Sep 2020 00:13:38 +0000 (20:13 -0400)
source/main.cpp

index 4bdd5a208df11e2267c67176cd3784245c67c1fb..596991d9bef4f59dea701cc9cd6e660809df7be6 100644 (file)
@@ -160,3 +160,28 @@ void port_syscall(struct port_extctx *ctxp, uint32_t n)
     chSysHalt("svc");
 }
 
+void conversion_abort()
+{
+    elf_entry = nullptr;
+    dac::write_stop();
+    adc::read_stop();
+    signal_operate_done = true;
+}
+
+extern "C" {
+
+__attribute__((naked))
+void HardFault_Handler()
+{
+    uint32_t *stack;
+    asm("mrs %0, msp" : "=r" (stack));
+    stack[6] = stack[5];
+    stack[7] |= (1 << 24);
+
+    asm("push {lr}");
+    conversion_abort();
+    asm("pop {lr}; bx lr");
+}
+
+} // extern "C"
+