On Fri, Jan 25, 2013, at 08:06 PM, Michael Haberler wrote:
> In the current code, the only components which start RT threads are motion 
> (motmod) and threads
> the only components which stop threads are hal_lib and motmod
> 
> they differ as follows:
> 
> - unloading 'motmod' stops all threads
> - unloading 'hal_lib' stops all threads
> - unloading 'threads' does _not_ stop threads
> 
> so using the latter you can have RT threads running without either motmod or 
> threads loaded

To a certain extent I see HAL as a generic platform
for building realtime control systems, one of which
happens to be LinuxCNC.

Any generic control system needs one or more
threads of execution, and the "threads" component
is just a hack to provide a way to create them when
using HAL for something other than LinuxCNC.  The
threads created by that component can have any
name(s) and reloading the component is allowed
so that you can create multiple threads incrementally
instead of being stuck with whatever you first 
created.

I sometimes use HAL interactively, literally
building a control system one piece at a time,
and I designed it to support that use case.

Ideally the "threads" component wouldn't exist,
and halcmd would simply offer a "newthread"
command, along with "delthread".  But there are
(or at least were) complications with doing that,
and the "threads" component was the lazy way out.

If your "HAL daemon" approach would allow a
"newthread" command to work, I think that would
be the best overall approach.  But that is only
my opinion.

Motmod creating threads is another hack.  Since 
LinuxCNC is the most common application that
uses HAL, and since most LinuxCNC users don't
really care about the messy details, motmod creates
the threads it needs automatically.  The threads that
motmod creates are always named the same ("base"
and "servo") because that makes things simpler for
LinuxCNC.

If we had a "HAL daemon" with a newthread command,
we would probably still want motmod to invoke the
command "under the hood" instead of making the
average LinuxCNC user explicitly think about threads.

> Intuitively I would say if I look at halcmd comp output
> and see neither threads or motmod loaded but thread
> functions actually called and maybe hardware moving
> that is confusing.

I think that is only because of the way threads are
created today.  In my mental model of HAL, pins
and parameters belong to components, just like pins
of integrated circuits on a PC board belong to the
parts that are soldered to the board.

On a PC board, signals (nets or traces in PC board
design terminology) are a different class of things.
They don't inherently belong to any of the parts on
the board, instead they belong to the board itself
and connect the parts.  Likewise, HAL signals to
belong to HAL itself, not any of the loaded components.

I see threads as more like signals than pins.  Threads
should exist as part of HAL itself, not belonging to any
one component, and they shouldn't stop and go away
until you shut down HAL.

 
> It really rests on a definition, namely whether threads
> are 'owned' by a module, and if so, which one(s);
> meaning unloading that module stops threads, or
> not. HAL does stop threads on exit, which suggests
> threads are 'owned' by HAL; in which case motmod 
> is inconsistent with that definition.

The intent is that threads are owned by HAL.  Motmod
is inconsistent with that definition because the distinction
doesn't matter to most people who use motmod.  The
goal, especially when HAL first came out, was to make
the transition from the old way to the HAL way transparent
to the average user.  
 
> Barring other suggestions, I will change threads to
> conform with motmod - that is, stop threads on unload,
> which I think is safe. I know barely anybody uses the
> threads module so that's likely safe but I'm raising it
> more to clarify semantics than to cry wolf.

I wouldn't say "barely anybody" uses threads.  It isn't
used by people who are running a finished LinuxCNC
configuration.  But it is used by people who are doing 
other things with HAL, and I'm pretty sure it is used
under the hood by the configuration wizards.  For
example, stepconf lets you actually run an axis.  I think
it uses threads to create the threads it needs to do that.
It could certainly use a "newthread" command instead,
if such a thing existed.

-- 
  John Kasunich
  jmkasun...@fastmail.fm

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
_______________________________________________
Emc-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to