Hello all,

I am in the process of implementing a full digital flight simulator in
RTLinux.

My prototype simulator was implemented on a DEC PDP11/55 and written
entirely in PDP11 assembler. I wrote an assembler to C code converter and
ported the prototype simulator over to a MSDOS based box. The exec uses the
8253/54 timer for scheduling. The exec also takes "passive peeks" at the
8253/54 countdown registers for module timing analysis. This system works
extremely well and we now have over 20 simulators either in process or
already converted from PDP11 to DOS Boxes. All of these simulators are in
the U.S. FAA Level A & B category, i.e. 4 degree hydraulic motion, 2 window
visual system, hydraulically assisted control loading, full functional
cockpit and aircraft systems complete with simulated real world Nav aids,
GPS, GPWS, Weather/color radar, etc....

Up till now the average simulator has around:

168 12 bit D/As
60 12 bit A/Ds
400 Discrete outputs
900 Discrete inputs

and around 70 simulation modules all scheduled at 20hz or some lower
multiple thereof. The final simulation is around 480k using 520k of the base
640k of memory available in a DOS box. Believe it or not, a standard P120
box can run all of this and only use about 23% of it's computing power!
(Since the original code was written in assembler all of the math is
non-floating point, all math is multiple precision integer math using scale
factors.)

I am now converting a Level C device which is atop a full 6 degree motion
system, with a 4 window daylight wrap-around visual. This machine is much
larger and more complex and is currently implemented on a Dual-DEC host.

This machine will easily break the 640k barrier set by MSDOS. Originally my
choices were to implement the new conversion using a DOS-extender or attempt
to code module swapping in/out of extended or enhanced memory. HOWEVER -
RTLinux appears to be an ideal candidate. I should be able to implement the
entire real-time in RT kernel mode and pass disk and Ethernet I/O requests
back out to user mode. I should also be able to implement the debugging
package in user mode Linux and "examine and change" the simulation via
shared memory commons. I have installed Linux 2.0.63-0.7 at home and at
work. I have also installed RTLinux 1.1 in both places. (Works great, lasts
a long time!) The final simulator box will be on an "old" Hewlett Packard
PII 350 box. Even though I am new to UNIX, I find this whole new world well
documented and FULL of friendly people who love to help.

Soooooo, I do have a few questions, and will undoubtedly have more in the
coming weeks. My original "attempt" will be to keep the same basic old exec
and have RTLinux call it via rt_task_make_peridoic(). I will need to
schedule my exec every 50 milliseconds. From what I have read jitter using
this process should be less than 20usec which is acceptable for our
purposes. Once my exec has finished executing all of it's currently
scheduled modules it should exit via an rt_task_wait(). RTLinux will then
call it 50msec later (+/-20usec) and the whole process will start over.
----- (Right?????)

I would like to be able to look at the 8253/54 prior to the execution of
each module, and again after exit from each module to determine it's
execution time in usec (the average module executes in less then 100usec). I
will need the full 838ns granularity of the 8253/54 to achieve reasonable
accuracy. Is there a Macro or function call to do this? Better yet, is there
a Macro or function call that would give me timing info. based on the
Pentium rdtsc command (I notice you calibrate this to the 8253/54 on
startup)?

Anyway, enough for now... Thanks in advance for your help.

Todd Gearheart
FlightSafety International
Simulator Systems Division
Field Engineering

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