[EMAIL PROTECTED] wrote:
Michael

in rt_request_timer() you do

        rt_release_irq(RTAI_TIMER_IRQ);
        if (rt_request_irq(RTAI_TIMER_IRQ, (rt_irq_handler_t)handler, NULL, 0) 
< 0) {

but then in rt_free_timer() only

        rt_release_irq(RTAI_TIMER_IRQ);

If I understand correctly, RTAI and Linux run under ADEOS in different
domains, right (please, correct, if wrong)? So, request_irq in different
domains is independent? Hence, the rt_release_irq(RTAI_TIMER_IRQ); in
rt_request_timer() is redundant?


Not exactly so. When the RTAI hal is started it virtualises all the irqs to a single ADEOS handler (rtai_irq_trampoline) that abstracts RTAI from ADEOS. So ADEOS calls the RTAI trampoline and the RTAI interface appears as an independent one.

Thus rt_release_irq(RTAI_TIMER_IRQ) releases just the the HAL part. The trampoline still sees the related interrupt as a hard one, but having no own handler just propagate it to Linux.

Paolo.


Reply via email to