From be2eb2635f858efeaa6bbebfb599ae37fb247244 Mon Sep 17 00:00:00 2001 From: Paulo Costa Date: Wed, 3 Feb 2016 22:43:57 -0200 Subject: 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) --- cores/arduino/WInterrupts.c | 80 ++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 59 deletions(-) (limited to 'cores/arduino/WInterrupts.c') diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index 7e9f717..cef1106 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -280,75 +280,37 @@ void attachInterruptTwi(void (*userFunc)(void) ) { } */ -#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](); -} +#define IMPLEMENT_ISR(vect, interrupt) \ + ISR(vect) { \ + intFunc[interrupt](); \ + } -ISR(INT3_vect) { - intFunc[EXTERNAL_INT_3](); -} +#if defined(__AVR_ATmega32U4__) -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 -- cgit v1.2.3-18-g5258