15.2.3 Coding ISRs
The following prototype declares function isr0
to be an interrupt
handler:
void __attribute__((interrupt(auto_psv))) isr0(void);
As this prototype indicates, interrupt functions must not take parameters nor may they
return a value. The compiler arranges for all working registers to be preserved, as well
as the Status register and the Repeat Count register, if necessary. Other variables may
be saved by naming them as parameters of the interrupt
attribute. For
example, to have the compiler automatically save and restore the variables,
var1
and var2
, use the following prototype:
void __attribute__((interrupt(auto_psv, save(var1, var2)))) isr0(void);
To request the compiler to use the fast context save (using the push.s
and pop.s
instructions), tag the function with the
shadow
attribute (see 14.1.1 Function Specifiers”). For example:
void __attribute__((interrupt(auto_psv, shadow))) isr0(void);