[En-Nut-Discussion] Cortex ih_xxx_interuptY code duplication, continued
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Wed Jul 18 18:35:44 CEST 2012
Hello,
if we accept the additional redirection for a common IrqCtl() function,
placement of IQR_HANDLER could be eased with a macro like
#ifdef NUT_PERFMON
#define sigEntry( x , y) \
static int x##IrqCtl(int cmd, void *param); \
\
IRQ_HANDLER y = { \
0, /* Interrupt counter, ir_count. */ \
NULL, /* Passed argument, ir_arg. */ \
NULL, /* Handler subroutine, ir_handler. */ \
x##IrqCtl /* Interrupt control, ir_ctl. */ \
}; \
\
static void x##IrqEntry(void *arg) \
{ \
y.ir_count++; \
if (y.ir_handler) { \
(y.ir_handler) (y.ir_arg); \
} \
} \
\
static int x##IrqCtl(int cmd, void *param) \
{ \
return IrqCtl(x##_IRQn, x##IrqEntry, &y, cmd, param); \
}
#else
#define sigEntry( x , y) \
static int x##IrqCtl(int cmd, void *param); \
\
IRQ_HANDLER y = { \
NULL, /* Passed argument, ir_arg. */ \
NULL, /* Handler subroutine, ir_handler. */ \
x##IrqCtl /* Interrupt control, ir_ctl. */ \
}; \
\
static void x##IrqEntry(void *arg) \
{ \
if (y.ir_handler) { \
(y.ir_handler) (y.ir_arg); \
} \
} \
\
static int x##IrqCtl(int cmd, void *param) \
{ \
return IrqCtl(x##_IRQn, x##IrqEntry, cmd, param); \
}
#endif
in a common header and a call to that macro like
sigEntry(RTC, sig_RTC)
Having two arguments in the macro call may help with some special cases, but
I am not sure of the imprtance yet.
Bye
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
More information about the En-Nut-Discussion
mailing list