Hello,

Good news: I am an experienced C(++) programmer familiar with computer
hardware and different platforms. Bad news: I am completely new to RT Linux
and also
quite a beginner in Linux programming in general. I wrote some real-time
(some would call it a quasi real-time) applications controlling user
hardware in  good-old DOS or using a special "operating systems" such as
pKernel. I am investigating the possibility to port one of my applications
from DOS to RT Linux mainly for educational purposes. I've installed RT 3.0,
went through examples and now - I am completely confused. I'll be grateful
for any help you can give to kick me over the start of my project.

First, a layout of DOS application. I am trying to port a typical "two-task"
single processor sampling application. The "user interface task" is running
as a normal DOS application using a home-made GUI library (that is also
ported to Linux using svgalib). The "real time task" is an interrupt handler
routine trigged by the highest priority hardware IRQ with constant period,
say 1 ms. Routine consists of IO operations (that must be done in constant
period with minimal glitch) and some quite complex computations (that must
be done at least just before the next interrupt). In DOS, IRQ routine simply
blocks the execution of the OS (read: no STI  for the time of the execution)
and takes approximately 60% of available processor time on 100 MHz Pentium
processor time each time it runs. Tasks interact via shared memory using the
only possible locking mechanism - user task disables interrupt for a very
short time while execution of IRQ routine can not be interrupted. Under DOS
I know exactly what I am doing so it even works.

This is what I am planning to port to RT Linux. I suppose I should consider
redesign of my application and here is where I need some help. First some
questions:

1) IMO it is always a bad idea to lock the serious RTOS (excluding DOS of
course <g>) for such a long time. Can somebody explain what would happen
under RTL if done so?

2) Handling IRQ, I have to make all IO operations before re-enabling
interrupts. I assume after that computation should be made in the highest
priority task in RT kernel space. Is anything wrong with such a design? Some
better ideas? Link to a similar example? And BTW, how to detect an overdue?

3) Can I use scheduling instead of IRQ to start the sample? How "accurate"
is it?

4) Communication between threads is something I can not decide how to.
Taking in account that there is quite some non-critical information from RT
thread (mostly read-only) that user thread must read often (where the data
*may* be partly incorrect now and than), what is in your opinion "the best"
way to do it? Shared memory, FIFOs, messaging...?

5) I have some problem understanding RT Linux mutexes. Do they include
priority switch to avoid priority dead locks?

Well, enough for the first post. I believe you'll hear from me again soon.

Sincerely

goran

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