rust-embedded / cortex-m

Low level access to Cortex-M processors
Apache License 2.0
835 stars 152 forks source link

HardFaultTrampoline now passes &mut ExceptionFrame #515

Open SCingolani opened 8 months ago

SCingolani commented 8 months ago

In order to allow for a user provided HardFault handler to modify the exception frame (e.g. to return to a different PC) the signature for the function to be used with the #[HardFault] handler now has a &mut ExceptionFrame instead of just a reference.

Use case: we want to catch an exception, so we set some flag, run some code that might trigger a HardFault, update the flag in the handler, and return to the instruction after the one that caused the exception. We can then check the flag to see if an exception occurred or not. Key point is: to return to the instruction following the one that caused the exception, we want to modify the PC on the ExceptionFrame before loading EXC_RETURN onto the PC.

thejpster commented 8 months ago

This would be a big breaking change.

Can the macro be adjusted to accept either a shared reference or a mutable reference as an argument to the handler function?