Skip to content

Commit 0ab9245

Browse files
author
Paulo Costa
committed
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 arduino#4519, but we all agreeded it deserved it's own PR)
1 parent 36c9419 commit 0ab9245

File tree

1 file changed

+21
-59
lines changed

1 file changed

+21
-59
lines changed

hardware/arduino/avr/cores/arduino/WInterrupts.c

+21-59
Original file line numberDiff line numberDiff line change
@@ -280,75 +280,37 @@ void attachInterruptTwi(void (*userFunc)(void) ) {
280280
}
281281
*/
282282

283-
#if defined(__AVR_ATmega32U4__)
284-
ISR(INT0_vect) {
285-
intFunc[EXTERNAL_INT_0]();
286-
}
287-
288-
ISR(INT1_vect) {
289-
intFunc[EXTERNAL_INT_1]();
290-
}
291-
292-
ISR(INT2_vect) {
293-
intFunc[EXTERNAL_INT_2]();
294-
}
283+
#define IMPLEMENT_ISR(vect, interrupt) \
284+
ISR(vect) { \
285+
intFunc[interrupt](); \
286+
}
295287

296-
ISR(INT3_vect) {
297-
intFunc[EXTERNAL_INT_3]();
298-
}
288+
#if defined(__AVR_ATmega32U4__)
299289

300-
ISR(INT6_vect) {
301-
intFunc[EXTERNAL_INT_4]();
302-
}
290+
IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_0)
291+
IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_1)
292+
IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_2)
293+
IMPLEMENT_ISR(INT3_vect, EXTERNAL_INT_3)
294+
IMPLEMENT_ISR(INT6_vect, EXTERNAL_INT_4)
303295

304296
#elif defined(EICRA) && defined(EICRB)
305297

306-
ISR(INT0_vect) {
307-
intFunc[EXTERNAL_INT_2]();
308-
}
309-
310-
ISR(INT1_vect) {
311-
intFunc[EXTERNAL_INT_3]();
312-
}
313-
314-
ISR(INT2_vect) {
315-
intFunc[EXTERNAL_INT_4]();
316-
}
317-
318-
ISR(INT3_vect) {
319-
intFunc[EXTERNAL_INT_5]();
320-
}
321-
322-
ISR(INT4_vect) {
323-
intFunc[EXTERNAL_INT_0]();
324-
}
325-
326-
ISR(INT5_vect) {
327-
intFunc[EXTERNAL_INT_1]();
328-
}
329-
330-
ISR(INT6_vect) {
331-
intFunc[EXTERNAL_INT_6]();
332-
}
333-
334-
ISR(INT7_vect) {
335-
intFunc[EXTERNAL_INT_7]();
336-
}
298+
IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_2)
299+
IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_3)
300+
IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_4)
301+
IMPLEMENT_ISR(INT3_vect, EXTERNAL_INT_5)
302+
IMPLEMENT_ISR(INT4_vect, EXTERNAL_INT_0)
303+
IMPLEMENT_ISR(INT5_vect, EXTERNAL_INT_1)
304+
IMPLEMENT_ISR(INT6_vect, EXTERNAL_INT_6)
305+
IMPLEMENT_ISR(INT7_vect, EXTERNAL_INT_7)
337306

338307
#else
339308

340-
ISR(INT0_vect) {
341-
intFunc[EXTERNAL_INT_0]();
342-
}
343-
344-
ISR(INT1_vect) {
345-
intFunc[EXTERNAL_INT_1]();
346-
}
309+
IMPLEMENT_ISR(INT0_vect, EXTERNAL_INT_0)
310+
IMPLEMENT_ISR(INT1_vect, EXTERNAL_INT_1)
347311

348312
#if defined(EICRA) && defined(ISC20)
349-
ISR(INT2_vect) {
350-
intFunc[EXTERNAL_INT_2]();
351-
}
313+
IMPLEMENT_ISR(INT2_vect, EXTERNAL_INT_2)
352314
#endif
353315

354316
#endif

0 commit comments

Comments
 (0)