GpioModuleTest
该程序直接调用 Module/GpioModule 的 GpioInput 公共接口,用于在 Linux 板卡上验证 I/O3 急停输入、输入极性和消抖逻辑。
默认配置对应当前停机引导急停配置:
- 输入配置文件:
/sys/external_gpio/jwsioc_inout_gpio3 - 电平读取文件:
/sys/external_gpio/jwsioc_gpio3 - 高电平有效
- 常闭安全回路:正常时 I/O3 接 GND,按下急停或线路断开时回路断开
- 轮询周期:10ms
- 消抖时间:50ms
运行示例:
sudo ./GpioModuleTest --seconds 30
CMake 交叉编译
测试目录可以独立编译,不需要先生成 libGpioModule.a。CMake 会直接编译 Module/GpioModule/Src/GpioInput.cpp 并链接测试程序。
使用已有 toolchain 文件:
cmake -S Test/GpioModuleTest -B build/GpioModuleTest-arm \
-DCMAKE_TOOLCHAIN_FILE=/path/to/aarch64-toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release
cmake --build build/GpioModuleTest-arm --parallel
也可以直接指定交叉编译器:
cmake -S Test/GpioModuleTest -B build/GpioModuleTest-arm \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_BUILD_TYPE=Release
cmake --build build/GpioModuleTest-arm --parallel
生成的程序位于:
build/GpioModuleTest-arm/bin/GpioModuleTest
测试期间先保持 I/O3 与 GND 正常闭合,再按下急停或断开线路。预期输出:
VALUE: INACTIVE (logical 0) [initial] # I/O3 与 GND 闭合,系统正常
IO3: INACTIVE (logical 0)
VALUE: ACTIVE (logical 1) [changed] # 急停按下或线路断开
IO3: ACTIVE (logical 1)
VALUE: INACTIVE (logical 0) [changed] # 回路重新闭合
程序启动时先向 jwsioc_inout_gpio3 写入 0,将 I/O3 配置为输入,然后每 10ms 读取 jwsioc_gpio3。默认每 500ms 打印一次状态,可通过 --print-ms 调整。UNAVAILABLE 表示配置文件或电平文件不可访问,应同时查看前面的 ERROR。
需要覆盖文件路径时:
sudo ./GpioModuleTest \
--direction /sys/external_gpio/jwsioc_inout_gpio3 \
--value /sys/external_gpio/jwsioc_gpio3 \
--seconds 30
若测试结果与预期极性相反,可以临时增加 --active-low 排查;正式急停逻辑固定为常闭回路断开触发,不应通过反转极性掩盖接线问题。
退出码:
0:GPIO 至少成功连接一次。1:命令行参数错误。2:模块启动失败,或测试期间 GPIO 始终不可用。3:当前平台不是 Linux。