Richard Freeman on 19 Oct 2010 09:13:40 -0700 |
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. Rich ___________________________________________________________________________ Philadelphia Linux Users Group -- http://www.phillylinux.org Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
|
|