Răsfoiți Sursa

[libcpu][arm] Add exception install function (#5827)

Tangyuxin 3 ani în urmă
părinte
comite
c80993f713
1 a modificat fișierele cu 19 adăugiri și 0 ștergeri
  1. 19 0
      libcpu/arm/cortex-a/trap.c

+ 19 - 0
libcpu/arm/cortex-a/trap.c

@@ -19,6 +19,18 @@
 extern long list_thread(void);
 #endif
 
+static rt_err_t (*rt_exception_hook)(void *context) = RT_NULL;
+
+/**
+ * This function set the hook, which is invoked on fault exception handling.
+ *
+ * @param exception_handle the exception handling hook function.
+ */
+void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context))
+{
+    rt_exception_hook = exception_handle;
+}
+
 /**
  * this function will show registers of CPU
  *
@@ -33,6 +45,13 @@ void rt_hw_show_register(struct rt_hw_exp_stack *regs)
     rt_kprintf("fp :0x%08x ip :0x%08x\n", regs->fp, regs->ip);
     rt_kprintf("sp :0x%08x lr :0x%08x pc :0x%08x\n", regs->sp, regs->lr, regs->pc);
     rt_kprintf("cpsr:0x%08x\n", regs->cpsr);
+    if (rt_exception_hook != RT_NULL)
+    {
+        rt_err_t result;
+
+        result = rt_exception_hook(regs);
+        if (result == RT_EOK) return;
+    }
 }
 
 void (*rt_trap_hook)(struct rt_hw_exp_stack *regs, const char *ex, unsigned int exception_type);