Hello again.
I found a *temporary* workaround to my problem. I created a periodic thread
as follows:
void *periodic_entry_point(void *p) {
while(1) {
rtl_schedule();
pthread_wait_np();
}
}
A period of 500 nano-seconds was too short and locked up my machine. I
changed this to 50 milli-seconds, and the keyboard remains responsive even
with interrupts coming once every 850 micro-seconds. Putting the
rtl_schedule() command inside the ISR or in the thread woken up by the ISR
did NOT work. I am a little uncomfortable with this solution, since it
seems that the CPU is probably sitting idle until the rtl_schedule()
command occurs, therefore wasting many CPU cycles. Can anyone offer a
better solution? Thanks.
Marvin
Marvin Germain wrote:
> Hello, all.
> My mouse and keyboard freeze when I call pthread_wakeup_np() from within
> a hard interrupt service routine. I am using RTLinux 3.0 with kernel
> 2.2.18 on a 1.5 GHz P4. My project uses two RTLinux modules: The first
> services hardware interrupts and transfers data from a DAQ board into an
> mbuff. The first module then wakes up a thread containied in a second
> module which performs computations on the data. Here is the basic
> format:
>
> **************
> First module: *
> **************
>
> extern pthread_t myThread;
>
> unsigned int my_isr(unsigned int irq, struct pt_regs *regs) {
> /* perform hardware-related things here */
> rtl_hard_enable_irq(irq);
> pthread_wakeup_np(myThread);
> }
>
> ***************
> Second module: *
> ***************
>
> pthread_t myThread;
>
> void *myEntryPoint(void *p) {
> while(1) {
> pthread_suspend_np(myThread);
> /* perform calculations here */
> }
> }
>
> When the interrupt rate is once every five milli-seconds, the mouse and
> keyboard freeze within two to three seconds. If I slow down the
> hardware so that the interrupts come only once every six milli-seconds,
> everything seems fine. I timed the execution of the ISR at 50
> micro-seconds. So the CPU loading is only one percent. The freezes
> occur even if I comment out everything in the while-loop except for the
> pthread_suspend_np(). The freezes do NOT occur if I comment out the
> pthread_wakeup_np() from the ISR. Any ideas?
>
> Marvin
>
--
-
*********************************************
* Dr. Marvin E. Germain *
* Zygo Corporation - Tucson AZ *
* [EMAIL PROTECTED] *
*********************************************
----- End of forwarded message from [EMAIL PROTECTED] -----
-- [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/