halcompile 不会使用 homing.c 中的代码编译自定义 homecomp.comp #1701

推推 grbl 3年前 (2023-01-30) 302次浏览
关闭
rodw-au 打开了这个问题 2022 年 4 月 6 日 · 2 条评论
关闭

halcompile 不会使用 homing.c 中的代码编译自定义 homecomp.comp#1701

rodw-au 打开了这个问题 2022 年 4 月 6 日 · 2 条评论

注释

halcompile 不会使用 homing.c 中的代码编译自定义 homecomp.comp #1701
罗德奥 评论了 2022 年 4 月 6 日  

我正在编写一个自定义归位模块,用于归位 cia402 ethercat 驱动器以使用其内部归位功能。编译这些函数的精确副本时出现此错误:

write_homing_out_pins()
read_homing_in_pins()

这些是关键功能,因为归位模块必须能够读取和写入引脚。
错误是:
rod@penguin:~$ halcompile --compile ciahome.comp Compiling realtime ciahome.c ciahome.comp: In function ‘write_homing_out_pins’: ciahome.comp:287:33: error: ‘H’ undeclared (first use in this function) ciahome.comp:287:33: note: each undeclared identifier is reported only once for each function it appears in ciahome.comp: In function ‘read_homing_in_pins’: ciahome.comp:304:9: error: ‘H’ undeclared (first use in this function) make: *** [/home/rod/linuxcnc-dev/src/Makefile.modinc:115: ciahome.o] Error 1]

该错误与采用以下形式的行有关:
*(addr->homing) = H[jno].homing; // OUT H[jno].index_enable = *(addr->index_enable); // IO
我在 homing.c 中添加了所有包含文件,但这并没有解决错误。
#include "motion.h" #include "homing.h" #include "hal.h" #include "rtapi.h" #include "rtapi_math.h"
我不知道 H 在哪里声明或者它是否是某种编译器指令
我只能假设构建环境在 halcompile 中是不同的
可以将此问题的解决方法添加到 homecomp 环境中

halcompile 不会使用 homing.c 中的代码编译自定义 homecomp.comp #1701
合作者
  1. “error: ‘H’ undeclared …” 表示您正在使用一个
    名为 ‘H’ 的变量而没有声明它。

  2. 如果函数引用其
    定义未被复制或以其他方式定义的变量,则不能仅将函数从一个程序复制到另一个程序。

提到的 H[] 数组变量在默认的 homing.c 中明确定义
为具有文件范围的静态变量:

https://github.com/LinuxCNC/linuxcnc/blob/master/src/emc/motion/homing.c#L130

  1. 文件静态变量(如 H[](以及许多其他变量)保留 由 motmod 在伺服 周期间隔
    调用的组件主程序 (rtapi_app_main()) 调用之间的状态信息。

  2. 文件 src/hal/components/homecomp.comp 说明了如何
    创建一个提供所有 api 函数并且可以
    使用 halcompile 构建/安装的组件。该示例可
    与 LinuxCNC 一起使用,但功能不完整($ man homecomp)。
    请注意,该示例仅使用了几个足以
    支持最低 api 要求的静态变量和一组
    与 sim 配置兼容的 hal 引脚。自定义归巢模块可以根据需要定义额外的文件静态变量,以与默认 homing.c 中相同的方式
    实现更多功能

https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/homecomp.comp

  1. 注意:最近修改了 master 分支的 homing api
    (05apr22):

d4dddb2f93