diff options
author | Paulo Costa <paulo.costa@geofusion.com.br> | 2016-02-03 22:43:57 -0200 |
---|---|---|
committer | Paulo Costa <paulo.costa@geofusion.com.br> | 2016-02-03 22:43:57 -0200 |
commit | be2eb2635f858efeaa6bbebfb599ae37fb247244 (patch) | |
tree | 998d2720c407a2b2d56b29ce9eea9d8584543e85 /cores/arduino | |
parent | b3caf62124fbd9bb0045775ff032eb62ec24becb (diff) |
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)
Diffstat (limited to 'cores/arduino')
-rw-r--r-- | cores/arduino/WInterrupts.c | 80 |
1 files changed, 21 insertions, 59 deletions
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 |