Boilerplate compression on ISR declaration

The current code is very verbose and a painful to maintain (Change ISR implementation in 20 different places? No Thanks!).

(This was originally part of #4519, but we all agreeded it deserved it's own PR)
This commit is contained in:
Paulo Costa 2016-02-03 22:43:57 -02:00
parent b3caf62124
commit be2eb2635f
1 changed files with 21 additions and 59 deletions

View File

@ -280,75 +280,37 @@ void attachInterruptTwi(void (*userFunc)(void) ) {
}
*/
#define IMPLEMENT_ISR(vect, interrupt) \
ISR(vect) { \
intFunc[interrupt](); \
}
#if defined(__AVR_ATmega32U4__)
ISR(INT0_vect) {
intFunc[EXTERNAL_INT_0]();
}
ISR(INT1_vect) {
intFunc[EXTERNAL_INT_1]();
}
ISR(INT2_vect) {
intFunc[EXTERNAL_INT_2]();
}
ISR(INT3_vect) {
intFunc[EXTERNAL_INT_3]();
}
ISR(INT6_vect) {
intFunc[EXTERNAL_INT_4]();
}
IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_0)
IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_1)
IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_2)
IMPLEMENT_ISR(INT3_vect, EXTERNAL_INT_3)
IMPLEMENT_ISR(INT6_vect, EXTERNAL_INT_4)
#elif defined(EICRA) && defined(EICRB)
ISR(INT0_vect) {
intFunc[EXTERNAL_INT_2]();
}
ISR(INT1_vect) {
intFunc[EXTERNAL_INT_3]();
}
ISR(INT2_vect) {
intFunc[EXTERNAL_INT_4]();
}
ISR(INT3_vect) {
intFunc[EXTERNAL_INT_5]();
}
ISR(INT4_vect) {
intFunc[EXTERNAL_INT_0]();
}
ISR(INT5_vect) {
intFunc[EXTERNAL_INT_1]();
}
ISR(INT6_vect) {
intFunc[EXTERNAL_INT_6]();
}
ISR(INT7_vect) {
intFunc[EXTERNAL_INT_7]();
}
IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_2)
IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_3)
IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_4)
IMPLEMENT_ISR(INT3_vect, EXTERNAL_INT_5)
IMPLEMENT_ISR(INT4_vect, EXTERNAL_INT_0)
IMPLEMENT_ISR(INT5_vect, EXTERNAL_INT_1)
IMPLEMENT_ISR(INT6_vect, EXTERNAL_INT_6)
IMPLEMENT_ISR(INT7_vect, EXTERNAL_INT_7)
#else
ISR(INT0_vect) {
intFunc[EXTERNAL_INT_0]();
}
ISR(INT1_vect) {
intFunc[EXTERNAL_INT_1]();
}
IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_0)
IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_1)
#if defined(EICRA) && defined(ISC20)
ISR(INT2_vect) {
intFunc[EXTERNAL_INT_2]();
}
IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_2)
#endif
#endif