Hi,
I'm running a RH7.2 with a rtlinux 3.1 a linux-2.2.19 kernel on a DELL 
Latitude laptop. Data aquisition is done with a PCI-card which holds a 9080 
from PLX technology. Data rate is about 14MSamples/s, which are transferred 
through DMA in 1KByte blocks (which equals to one "slot"). The loop that gets 
the data looks like this ( I tried to simplify it as much as possible without 
deleting stuff that is important...):

void myLoop(){
  rtl_setclockmode(CLOCK_RTL_SCHED,
                   RTL_CLOCK_MODE_ONESHOT,
                   0);
  start_time = clock_gethrtime(CLOCK_RTL_SCHED)+
                               (hrtime_t)GPP_SLOT_TIME_NS;
  pthread_make_periodic_np(pthread_self(),
                           start_time,
                           0);
  do {
    pthread_wait_np();
    rtl_printf( "mailbox: %i\n", mbox_9080 );

    [ lots of calculations ]

    offset = slot_count - mbox_9080;
    // mbox_9080 holds the number of DMA-blocks already written into
    // memory.

    start_time = clock_gethrtime(CLOCK_RTL_SCHED) + 
                 offset*BLOCK_TIME_NS;
    if (offset > 1)
      pthread_make_periodic_np(pthread_self(),start_time,0);
    else
      EXIT=1;

    slot_count++;
  } while (EXIT == 0);
}

Now: on a dual-pentium, this works real nice. No problem at all. The 
wakeup-time is always accurate to at least 50us (the time of a "slot"). But, 
as soon as I let it run on the laptop (single processor, 1GHz PIII), these 
wakeup-calls may be missed by as much as 10ms (yes, 200 "slots") once every 
2-3 minutes. Of course my first reaction was to remove all APM-functions, 
then to compile the kernel non-SMP and then I let run a script in parallel, 
like

while sleep 1; do date +%T >> log; cat /proc/loadavg >> log; ps ax | tail -n 
10 | head -n 7 >> log; done

So I could look at what happens. But there was nothing special. So I turned 
off all services I'm sure aren't in use, switched to runlevel 3 and tried 
again. Still no luck. Then I shut down the network and started the thing 
locally (before I did it over the network), still no luck. Threw away the 
graphical interface, no luck.
 Now I don't have any ideas left of what to do. I'm running in text-mode, 
runlevel 3, w/o all the bells and whistles, no network and it still crashes 
on me... runlevel s, shut down everything, ps ax yields:
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:05 init
    2 ?        SW     0:00 [kflushd]
    3 ?        SW     0:00 [kupdate]
    4 ?        SW     0:00 [kswapd]
    5 ?        SW     0:00 [keventd]
 7254 tty3     S      0:00 init
 7255 tty3     S      0:00 /bin/sh
 7463 tty3     R      0:00 ps ax
(no lines omitted...) and it still crashes...
 Does anyone have another idea? Everything that I can think of that 
interrupts my process I turned off. Do YOU have any idea of what to do?

Greets

ineiti
-- [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/

Reply via email to