[En-Nut-Discussion] Cortex ih_xxx_interuptY code duplication, continued
Ulrich Prinz
ulrich.prinz at googlemail.com
Fri Jul 27 15:17:22 CEST 2012
Hi!
2012/7/26 Uwe Bonnes <bon at elektron.ikp.physik.tu-darmstadt.de>:
>>>>>> "Ole" == Ole Reinhardt <ole.reinhardt at embedded-it.de> writes:
>
> ...
> Ole> What about the same approach Linux goes?
>
> Ole> You can register as much IRQ handlers to one IRQ as you like. Every
> Ole> handler now has to return if it handled the IRQ or not. As long as
> Ole> the IRQ was not handled the next handler will be called.
>
> Ole> This way we would have to handle a linked list of IRQ handlers for
> Ole> each IRQ. In most cases this will end up in just a single call
> Ole> which does not add (much) cycles to the IRQ handling at all.
>
> Sounds good.
I agree, that really sounds good.
The former function pointer could point to a struct that points to a
function plus a struct of his own type.
Then just run through all concatenated structs until you get a NULL.
Did that for the LEDs and key driver in nutos. Only thing is to
strictly take care that the last struct has always set the next
pointer to 0.
/* fault check for irq is pointer and not has an empty caller function*/
while ( irq, irq->fkt) {
if ( (irq->fkt)(par) ) {
/* break as function handled the irq (ret != 0) */
break;
}
irq = irq->next;
}
Ulrich
More information about the En-Nut-Discussion
mailing list