mirror of
https://github.com/esp-rs/esp-hal.git
synced 2025-10-02 22:55:26 +00:00
Panic when DefaultHandler gets invoked (#1005)
* Panic when DefaultHandler gets invoked * CHANGELOG.md * Use EspDefaultHandler for unhandled interrupts * `defmt`safe EspDefaultHandler
This commit is contained in:
parent
5b177ecc4a
commit
dfad09d85c
@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Reworked construction of I2S driver instances (#983)
|
- Reworked construction of I2S driver instances (#983)
|
||||||
- S2 / S3: Don't require GPIO 18 to create a USB peripheral driver instance (#990)
|
- S2 / S3: Don't require GPIO 18 to create a USB peripheral driver instance (#990)
|
||||||
- Updated to latest release candidate (`1.0.0-rc.2`) for `embedded-hal{-async,-nb}` (#994)
|
- Updated to latest release candidate (`1.0.0-rc.2`) for `embedded-hal{-async,-nb}` (#994)
|
||||||
|
- Explicit panic when hitting the `DefaultHandler` (#1005)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
|
|||||||
PROVIDE(SupervisorExternal = DefaultHandler);
|
PROVIDE(SupervisorExternal = DefaultHandler);
|
||||||
PROVIDE(MachineExternal = DefaultHandler);
|
PROVIDE(MachineExternal = DefaultHandler);
|
||||||
|
|
||||||
PROVIDE(DefaultHandler = DefaultInterruptHandler);
|
|
||||||
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
||||||
|
|
||||||
PROVIDE(__post_init = default_post_init);
|
PROVIDE(__post_init = default_post_init);
|
||||||
|
@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
|
|||||||
PROVIDE(SupervisorExternal = DefaultHandler);
|
PROVIDE(SupervisorExternal = DefaultHandler);
|
||||||
PROVIDE(MachineExternal = DefaultHandler);
|
PROVIDE(MachineExternal = DefaultHandler);
|
||||||
|
|
||||||
PROVIDE(DefaultHandler = DefaultInterruptHandler);
|
|
||||||
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
||||||
|
|
||||||
PROVIDE(__post_init = default_post_init);
|
PROVIDE(__post_init = default_post_init);
|
||||||
|
@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
|
|||||||
PROVIDE(SupervisorExternal = DefaultHandler);
|
PROVIDE(SupervisorExternal = DefaultHandler);
|
||||||
PROVIDE(MachineExternal = DefaultHandler);
|
PROVIDE(MachineExternal = DefaultHandler);
|
||||||
|
|
||||||
PROVIDE(DefaultHandler = DefaultInterruptHandler);
|
|
||||||
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
||||||
|
|
||||||
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6 has
|
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6 has
|
||||||
|
@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
|
|||||||
PROVIDE(SupervisorExternal = DefaultHandler);
|
PROVIDE(SupervisorExternal = DefaultHandler);
|
||||||
PROVIDE(MachineExternal = DefaultHandler);
|
PROVIDE(MachineExternal = DefaultHandler);
|
||||||
|
|
||||||
PROVIDE(DefaultHandler = DefaultInterruptHandler);
|
|
||||||
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
|
||||||
|
|
||||||
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6 and ESP32-H2 have
|
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6 and ESP32-H2 have
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
PROVIDE(DefaultHandler = EspDefaultHandler);
|
||||||
|
|
||||||
PROVIDE(interrupt1 = DefaultHandler);
|
PROVIDE(interrupt1 = DefaultHandler);
|
||||||
PROVIDE(interrupt2 = DefaultHandler);
|
PROVIDE(interrupt2 = DefaultHandler);
|
||||||
PROVIDE(interrupt3 = DefaultHandler);
|
PROVIDE(interrupt3 = DefaultHandler);
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
PROVIDE(DefaultHandler = EspDefaultHandler);
|
||||||
|
|
||||||
PROVIDE(level1_interrupt = DefaultHandler);
|
PROVIDE(level1_interrupt = DefaultHandler);
|
||||||
PROVIDE(level2_interrupt = DefaultHandler);
|
PROVIDE(level2_interrupt = DefaultHandler);
|
||||||
PROVIDE(level3_interrupt = DefaultHandler);
|
PROVIDE(level3_interrupt = DefaultHandler);
|
||||||
|
@ -161,22 +161,32 @@ pub mod trapframe {
|
|||||||
// be directly exposed.
|
// be directly exposed.
|
||||||
mod soc;
|
mod soc;
|
||||||
|
|
||||||
|
#[cfg(xtensa)]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
extern "C" fn EspDefaultHandler(_level: u32, _interrupt: peripherals::Interrupt) {
|
extern "C" fn EspDefaultHandler(_level: u32, _interrupt: peripherals::Interrupt) {
|
||||||
#[cfg(feature = "log")]
|
#[cfg(not(feature = "defmt"))]
|
||||||
warn!("Unhandled level {} interrupt: {:?}", _level, _interrupt);
|
panic!("Unhandled level {} interrupt: {:?}", _level, _interrupt);
|
||||||
|
|
||||||
#[cfg(feature = "defmt")]
|
#[cfg(feature = "defmt")]
|
||||||
warn!(
|
panic!(
|
||||||
"Unhandled level {} interrupt: {:?}",
|
"Unhandled level {} interrupt: {:?}",
|
||||||
_level,
|
_level,
|
||||||
defmt::Debug2Format(&_interrupt)
|
defmt::Debug2Format(&_interrupt)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(xtensa)]
|
#[cfg(riscv)]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
extern "C" fn DefaultHandler() {}
|
extern "C" fn EspDefaultHandler(_interrupt: peripherals::Interrupt) {
|
||||||
|
#[cfg(not(feature = "defmt"))]
|
||||||
|
panic!("Unhandled interrupt: {:?}", _interrupt);
|
||||||
|
|
||||||
|
#[cfg(feature = "defmt")]
|
||||||
|
panic!(
|
||||||
|
"Unhandled interrupt: {:?}",
|
||||||
|
defmt::Debug2Format(&_interrupt)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// Available CPU cores
|
/// Available CPU cores
|
||||||
///
|
///
|
||||||
|
Loading…
x
Reference in New Issue
Block a user