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:
Björn Quentin 2023-12-11 09:45:39 +01:00 committed by GitHub
parent 5b177ecc4a
commit dfad09d85c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 20 additions and 9 deletions

View File

@ -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)
- 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)
- Explicit panic when hitting the `DefaultHandler` (#1005)
### Fixed

View File

@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
PROVIDE(SupervisorExternal = DefaultHandler);
PROVIDE(MachineExternal = DefaultHandler);
PROVIDE(DefaultHandler = DefaultInterruptHandler);
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
PROVIDE(__post_init = default_post_init);

View File

@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
PROVIDE(SupervisorExternal = DefaultHandler);
PROVIDE(MachineExternal = DefaultHandler);
PROVIDE(DefaultHandler = DefaultInterruptHandler);
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
PROVIDE(__post_init = default_post_init);

View File

@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
PROVIDE(SupervisorExternal = DefaultHandler);
PROVIDE(MachineExternal = DefaultHandler);
PROVIDE(DefaultHandler = DefaultInterruptHandler);
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6 has

View File

@ -14,7 +14,6 @@ PROVIDE(UserExternal = DefaultHandler);
PROVIDE(SupervisorExternal = DefaultHandler);
PROVIDE(MachineExternal = DefaultHandler);
PROVIDE(DefaultHandler = DefaultInterruptHandler);
PROVIDE(ExceptionHandler = DefaultExceptionHandler);
/* The ESP32-C2 and ESP32-C3 have interrupt IDs 1-31, while the ESP32-C6 and ESP32-H2 have

View File

@ -1,3 +1,5 @@
PROVIDE(DefaultHandler = EspDefaultHandler);
PROVIDE(interrupt1 = DefaultHandler);
PROVIDE(interrupt2 = DefaultHandler);
PROVIDE(interrupt3 = DefaultHandler);

View File

@ -1,3 +1,5 @@
PROVIDE(DefaultHandler = EspDefaultHandler);
PROVIDE(level1_interrupt = DefaultHandler);
PROVIDE(level2_interrupt = DefaultHandler);
PROVIDE(level3_interrupt = DefaultHandler);

View File

@ -161,22 +161,32 @@ pub mod trapframe {
// be directly exposed.
mod soc;
#[cfg(xtensa)]
#[no_mangle]
extern "C" fn EspDefaultHandler(_level: u32, _interrupt: peripherals::Interrupt) {
#[cfg(feature = "log")]
warn!("Unhandled level {} interrupt: {:?}", _level, _interrupt);
#[cfg(not(feature = "defmt"))]
panic!("Unhandled level {} interrupt: {:?}", _level, _interrupt);
#[cfg(feature = "defmt")]
warn!(
panic!(
"Unhandled level {} interrupt: {:?}",
_level,
defmt::Debug2Format(&_interrupt)
);
}
#[cfg(xtensa)]
#[cfg(riscv)]
#[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
///