I apologize if this sounds confused; it's because I am.

I'm trying to understand how thread dispatching works.  Using the sound
example, I wrote an IRQ handler that does the following:

irq_handler()
{
    clear_hardware_irq();
    pulse_output();
    rtl_hard_enable_irq(x);
}

Everything works fine.  I look on my scope and can measure the time between
the input pulse that causes the interrupt and the output pulse from
pulse_output().

>From the same sound example, I then tried a variation where a thread is
dispatched from the handler, ie.

irq_handler()
{
    pthread_wakeup_np(thread);
    clear_hardware_irq();
    rtl_hard_enable_irq(x);
}

and my thread looks like

void *my_thread(void *param)
{
    rtl_stop_interrupts();
    while (1) {
        pthread_suspend_np(pthread_self());
        pulse_output();
    }
}

When I look on the scope I see 2 output pulses about 10usec apart, instead
of the expected 1 which I saw with the previous version.  Since I don't have
a capture scope where I can freeze, I cannot say for certain there were
actually 2 pulses.  But it sure looks this way.  Only way for this to happen
is if the thread ran twice.  Not possible, is it?

As a afternote, the system cannot be interrupted twice because the input
that generated the interrupt is vetoed until I do pulse_output() which
removes the veto.  In any case the input rate is too slow.

-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
--
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to