Just playing along at home with test code ... nothing to see here.
Code:
#include <stdio.h>
void isr0(void) { fputs("isr0 ", stdout); }
void isr1(void) { fputs("isr1 ", stdout); }
void isr2(void) { fputs("isr2 ", stdout); }
void isr3(void) { fputs("isr3 ", stdout); }
void isr4(void) { fputs("isr4 ", stdout); }
void isr5(void) { fputs("isr5 ", stdout); }
void isr6(void) { fputs("isr6 ", stdout); }
void isr7(void) { fputs("isr7 ", stdout); }
void isr8(void) { fputs("isr8 ", stdout); }
void isr9(void) { isr1(); isr8(); }
void isrA(void) { fputs("isrA ", stdout); }
void isrB(void) { fputs("isrB ", stdout); }
void isrC(void) { fputs("isrC ", stdout); }
void isrD(void) { fputs("isrD ", stdout); }
void isrE(void) { fputs("isrE ", stdout); }
void isrF(void) { isr3(); isr4(); isr8(); }
void fakeisr(int value)
{
static void (*const function[])(void) =
{
isr0,isr1,isr2,isr3,isr4,isr5,isr6,isr7,
isr8,isr9,isrA,isrB,isrC,isrD,isrE,isrF,
};
function[value & 0xF]();
putchar('\n');
}
int main()
{
int i;
for ( i = 0; i < 20; ++i )
{
printf("i = %2d: ", i);
fakeisr(i);
}
return 0;
}
/* my output
i = 0: isr0
i = 1: isr1
i = 2: isr2
i = 3: isr3
i = 4: isr4
i = 5: isr5
i = 6: isr6
i = 7: isr7
i = 8: isr8
i = 9: isr1 isr8
i = 10: isrA
i = 11: isrB
i = 12: isrC
i = 13: isrD
i = 14: isrE
i = 15: isr3 isr4 isr8
i = 16: isr0
i = 17: isr1
i = 18: isr2
i = 19: isr3
*/
[edit]
Code:
#include <stdio.h>
void isr0(void) { }
void isr1(void) { fputs("timers ", stdout); }
void isr2(void) { fputs("I/O ", stdout); }
void isr3(void) { isr2(); isr1(); }
void isr4(void) { fputs("misc ", stdout); }
void isr5(void) { isr4(); isr1(); }
void isr6(void) { isr4(); isr2(); }
void isr7(void) { isr4(); isr3(); }
void isr8(void) { fputs("other ", stdout); }
void isr9(void) { isr8(); isr1(); }
void isrA(void) { isr8(); isr2(); }
void isrB(void) { isr8(); isr3(); }
void isrC(void) { isr8(); isr4(); }
void isrD(void) { isr8(); isr5(); }
void isrE(void) { isr8(); isr6(); }
void isrF(void) { isr8(); isr7(); }
void fakeisr(int value)
{
static void (*const function[])(void) =
{
isr0,isr1,isr2,isr3,isr4,isr5,isr6,isr7,
isr8,isr9,isrA,isrB,isrC,isrD,isrE,isrF,
};
function[value & 0xF]();
putchar('\n');
}
int main()
{
int i;
for ( i = 0; i < 16; ++i )
{
printf("i = %2d: ", i);
fakeisr(i);
}
return 0;
}
/* my output
i = 0:
i = 1: timers
i = 2: I/O
i = 3: I/O timers
i = 4: misc
i = 5: misc timers
i = 6: misc I/O
i = 7: misc I/O timers
i = 8: other
i = 9: other timers
i = 10: other I/O
i = 11: other I/O timers
i = 12: other misc
i = 13: other misc timers
i = 14: other misc I/O
i = 15: other misc I/O timers
*/