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/