Vincent Levesque wrote: > Hello, > > I'd like to have your opinion on the best way to implement a GUI for a > RT application. The standard approach seems to be to split of the > application in two processes that communicate using shared memory or > queues. I've been using a different approach that's closer to what's > done in many non-realtime apps. I tried to put both the GUI and RT code > in a single process using threads, shared objects and mutexes. It seemed > to work fairly well for a while but it stopped working after switching > to GCC 4.0 (while upgrading Ubuntu Linux). After spending a few days > debugging this problem, I get the feeling that I'm doing something > "illegal" with RTAI/fusion that worked by accident until the upgrade. > > Here's what I've been doing... I create some objects, each with its own > RT_MUTEX. I then create two RT tasks: one for the GUI and one for my > hardware. Both taks have pointers to the shared objects. They call the > objects' methods directly. The object locks or tries to lock its mutex > in its methods, as appropriate. Both tasks are thus using the same > RT_MUTEX structure. I've been careful to lock the mutexes only for short > amounts of time and to only try to lock it in critical code. ...and hopefully do not call any non-rt functions while holding the lock. Note that you can install a SIGXCPU handler to catch such potential accidental violations. Likely not needed if you only copy some data between the shared objects and your local buffers (all locked into memory - mlockall?). > > To summarize, > > 1. What's the best way to implement a GUI for a RT app? Depends too much on your requirements, GUI toolkit, etc. to give a general statement here. > 2. Is my approach "legal" in fusion/xenomai? Sounds sane to me. Which fusion version are you using? Already tried to update some component (kernel, patch, fusion/xenomai) and watch potential changes? > 3. I remember reading that RTAI and X don't play well together. Is that > the case with Xenomai? Will things be better if I use the two-processes > approach? Not a general problem, but a specific one related to certain graphic cards and drivers (don't ask me which, we are only using head-less or console-based boxes here). Jan