Richard Freeman on 19 Oct 2010 09:13:40 -0700

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [PLUG] Serial & parallel ports; lack thereof

On 10/19/2010 08:35 AM, Eric H. Johnson wrote:
> You are correct on both points, it was me that said that and USB devices
> cannot be used for hard real-time. PCI based parallel port boards often can
> work, but that is little help when dealing with a laptop having neither a
> parallel port nor PCI bus.
> ...
> There are also other issues with using laptops for hard real-time, which
> exist in all modern mother boards but are particularly prevalent in those
> used primarily in laptop and notebook computers. In the BIOS, all power
> management must be turned off, the processor should never be allowed to
> "gracefully" degrade. Further, hyper-threading should generally be turned
> off as well. If one wants to take advantage of multiple processors, use the
> SMP packages (new to version 2.4.5), which allows assigning the hard
> real-time tasks exclusively to a single processor and everything else to the
> other or remaining processors.  

Honestly, if you're interested in real-time, then an OS designed for
this should be used.  I think linux can be used in this capacity, but in
some cases there are better tools for the job.

In theory a PC can be a good realtime platform. A realtime OS would
probably start by ditching the BIOS completely (just wipe out the IDT
and write your own low-level routines).  Realtime operations really
requires a bare-hardware level of engineering.

I'd tend to think that for an application like this the easier solution
would be to have a desktop that runs a more normal linux install, but
optimized for near-realtime performance.  That would be coupled with a
hardware controller that would be interfaced by something modern like
USB or ethernet.  The software would send high-level commands to the
controller, and the controller would execute those commands in realtime.
 The controller would be a completely embedded realtime system.

A really simple example of this would be a controller that accepted USB
serial commands and had a number of outputs.  The command set would
support creating a sequential set of instructions in the device's
memory.  Each instruction would be a time index, an output, and an
output setting or something similarly low-level.  So the PC might tell
the controller to emit a 10ms 1v pulse on line 5 at clock=358ms.  Then
the controller is given the go command and it runs the program in realtime.

This kind of combination approach would let you run a more normal OS
with a fancy GUI on the PC, but still have full realtime control over
anything that is time-critical.

Disclaimer - I am NOT an expert on realtime anything, or CNCs in
particular.  However, it wouldn't surprise me if most realtime systems
already work in a similar fashion.  I know that most scientific
instruments tend to take an approach like this for anything that is
actually time-sensitive.

Philadelphia Linux Users Group         --
Announcements -
General Discussion  --