[−][src]Attribute Macro msp430_rt::interrupt
#[interrupt]
Attribute to declare an interrupt handler
When the device feature is disabled this attribute can only be used to override the
DefaultHandler.
When the device feature is enabled this attribute can be used to override other interrupt
handlers but only when imported from a PAC (Peripheral Access Crate) crate which re-exports it.
Importing this attribute from the msp430-rt crate and using it on a function will result in a
compiler error.
Syntax
extern crate device; // the attribute comes from the device crate not from msp430-rt use device::interrupt; #[interrupt] fn USART1() { // .. }
where the name of the function must be DefaultHandler or one of the device interrupts.
Usage
#[interrupt] fn Name(.. overrides the default handler for the interrupt with the given Name.
These handlers must have signature [unsafe] fn() [-> !]. It's possible to add state to these
handlers by declaring static mut variables at the beginning of the body of the function. These
variables will be safe to access from the function body.
If the interrupt handler has not been overridden it will be dispatched by the default interrupt
handler (DefaultHandler).
#[interrupt] fn DefaultHandler(.. can be used to override the default interrupt handler. When
not overridden DefaultHandler defaults to an infinite loop.
Properties
Interrupts handlers can only be called by the hardware. Other parts of the program can't refer to the interrupt handlers, much less invoke them as if they were functions.
static mut variables declared within an interrupt handler are safe to access and can be used
to preserve state across invocations of the handler. The compiler can't prove this is safe so
the attribute will help by making a transformation to the source code: for this reason a
variable like static mut FOO: u32 will become let FOO: &mut u32;.
Examples
- Using state within an interrupt handler
extern crate device; use device::interrupt; #[interrupt] fn TIM2() { static mut COUNT: i32 = 0; // `COUNT` is safe to access and has type `&mut i32` *COUNT += 1; println!("{}", COUNT); }