Added an API for user exception handlers
This commit is contained in:
parent
42ccb47eb3
commit
4838072ecf
2 changed files with 22 additions and 0 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include "esp/dport_regs.h"
|
#include "esp/dport_regs.h"
|
||||||
#include "espressif/esp_common.h"
|
#include "espressif/esp_common.h"
|
||||||
#include "esplibs/libmain.h"
|
#include "esplibs/libmain.h"
|
||||||
|
#include "user_exception.h"
|
||||||
|
|
||||||
/* Forward declarations */
|
/* Forward declarations */
|
||||||
static void IRAM fatal_handler_prelude(void);
|
static void IRAM fatal_handler_prelude(void);
|
||||||
|
@ -33,6 +34,8 @@ static void __attribute__((noinline)) __attribute__((noreturn)) abort_handler_in
|
||||||
|
|
||||||
static IRAM_DATA fatal_exception_handler_fn fatal_exception_handler_inner = standard_fatal_exception_handler_inner;
|
static IRAM_DATA fatal_exception_handler_fn fatal_exception_handler_inner = standard_fatal_exception_handler_inner;
|
||||||
|
|
||||||
|
static void (*user_exception_handler)(void) = NULL;
|
||||||
|
|
||||||
/* fatal_exception_handler called from any unhandled user exception
|
/* fatal_exception_handler called from any unhandled user exception
|
||||||
*
|
*
|
||||||
* (similar to a hard fault on other processor architectures)
|
* (similar to a hard fault on other processor architectures)
|
||||||
|
@ -157,6 +160,10 @@ static void IRAM fatal_handler_prelude(void) {
|
||||||
}
|
}
|
||||||
Cache_Read_Disable();
|
Cache_Read_Disable();
|
||||||
Cache_Read_Enable(0, 0, 1);
|
Cache_Read_Enable(0, 0, 1);
|
||||||
|
|
||||||
|
if (user_exception_handler != NULL) {
|
||||||
|
user_exception_handler();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Main part of fatal exception handler, is run from flash to save
|
/* Main part of fatal exception handler, is run from flash to save
|
||||||
|
@ -230,3 +237,9 @@ static void abort_handler_inner(uint32_t *caller, uint32_t *sp) {
|
||||||
dump_heapinfo();
|
dump_heapinfo();
|
||||||
post_crash_reset();
|
post_crash_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_user_exception_handler(void (*fn)(void))
|
||||||
|
{
|
||||||
|
user_exception_handler = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
9
core/include/user_exception.h
Normal file
9
core/include/user_exception.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/* Allows the user to set their own exception handler. */
|
||||||
|
|
||||||
|
#ifndef _USER_EXCEPTION_H
|
||||||
|
#define _USER_EXCEPTION_H
|
||||||
|
|
||||||
|
void set_user_exception_handler(void (*fn)(void));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue