The Kicad THREAD symbol (center bottom) creates the HAL
addf commands connecting HAL component functions to the realtime threads:
Change the Kicad reference to match the HAL thread name. AFAICT, you can use either
base-thread, as defined by the
LoadRT configuration (center top).
Opinion: contemporary x86-64 PC architecture pretty much prevents running a
base-thread at the pace required for step generation through a parallel port. In point of fact, I wrote Kicad-to-HAL specifically to configure a PC around a Mesa Electronics 5i25 FPGA controller for my Sherline CNC mill, as the real-time latency had regular glitches far exceeding the nominal 50 µs period. I suspect few new CNC installations will need a fast base thread.
The THREAD symbol has seven “Power output” pins drawn in the Clock graphic style:
Kicad-to-HAL finds the other components attached to each pin and generates
#------ # Function hookups # Position: 1 addf hm2_5i25.0.read servo-thread # Position: _ addf and2.0 servo-thread addf constant.0 servo-thread addf constant.1 servo-thread addf not.0 servo-thread addf timedelay.0 servo-thread addf toggle.0 servo-thread # Position: -1 addf hm2_5i25.0.write servo-thread
FiXME: Contrary to the comment in the symbol,
addf commands for each pin come out sorted by reference.
hostmot2 HAL component (middle right in the first screenshot) generates several function names that don’t require connections, but Kicad-to-HAL produces a warning for single-pin (i.e. unconnected) nets with non-default names. Prefix the pin name with an asterisk (
*read-gpio) to suppress the error message.
motion HAL component (lower right below) has functions that do not follow the normal naming convention:
Prefix the Kicad pin name with a slash (
/motion-controller) to tell Kicad-to-HAL to use the name without the standard
# Position: 2 addf motion-command-handler servo-thread addf motion-controller servo-thread
Perhaps they were supposed to be
motion.controller, but it’s too late to change? If so, I know that feeling.
Other quirks surely lurk within other HAL components, but, on the whole, this seems to work pretty well.