aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/WInterrupts.c
diff options
context:
space:
mode:
authorPaulo Costa <paulo.costa@geofusion.com.br>2016-02-03 22:43:57 -0200
committerPaulo Costa <paulo.costa@geofusion.com.br>2016-02-03 22:43:57 -0200
commitbe2eb2635f858efeaa6bbebfb599ae37fb247244 (patch)
tree998d2720c407a2b2d56b29ce9eea9d8584543e85 /cores/arduino/WInterrupts.c
parentb3caf62124fbd9bb0045775ff032eb62ec24becb (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/WInterrupts.c')
-rw-r--r--cores/arduino/WInterrupts.c80
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