52 lines
1.2 KiB
Rust
52 lines
1.2 KiB
Rust
//! Overriding an exception handler
|
|
//!
|
|
//! You can override an exception handler using the [`exception!`][1] macro.
|
|
//!
|
|
//! [1]: https://docs.rs/cortex-m-rt/0.3.2/cortex_m_rt/macro.exception.html
|
|
//!
|
|
//! The default exception handler can be overridden using the
|
|
//! [`default_handler!`][2] macro
|
|
//!
|
|
//! [2]: https://docs.rs/cortex-m-rt/0.3.2/cortex_m_rt/macro.default_handler.html
|
|
//!
|
|
//! ---
|
|
//!
|
|
//! ```
|
|
//!
|
|
//! #![feature(used)]
|
|
//! #![no_std]
|
|
//!
|
|
//! extern crate cortex_m;
|
|
//! #[macro_use(exception)]
|
|
//! extern crate cortex_m_rt;
|
|
//!
|
|
//! use core::ptr;
|
|
//!
|
|
//! use cortex_m::asm;
|
|
//!
|
|
//! fn main() {
|
|
//! unsafe {
|
|
//! // Invalid memory access
|
|
//! ptr::read_volatile(0x2FFF_FFFF as *const u32);
|
|
//! }
|
|
//! }
|
|
//!
|
|
//! exception!(HARD_FAULT, handler);
|
|
//!
|
|
//! fn handler() {
|
|
//! // You'll hit this breakpoint rather than the one in cortex-m-rt
|
|
//! asm::bkpt()
|
|
//! }
|
|
//!
|
|
//! // As we are not using interrupts, we just register a dummy catch all handler
|
|
//! #[allow(dead_code)]
|
|
//! #[used]
|
|
//! #[link_section = ".vector_table.interrupts"]
|
|
//! static INTERRUPTS: [extern "C" fn(); 240] = [default_handler; 240];
|
|
//!
|
|
//! extern "C" fn default_handler() {
|
|
//! asm::bkpt();
|
|
//! }
|
|
//! ```
|
|
// Auto-generated. Do not modify.
|