# GpioModuleTest 该程序直接调用 `Module/GpioModule` 的 `GpioInput` 公共接口,用于在 Linux 板卡上验证 I/O3 急停输入、输入极性和消抖逻辑。 默认配置对应当前停机引导急停配置: - 输入配置文件:`/sys/external_gpio/jwsioc_inout_gpio3` - 电平读取文件:`/sys/external_gpio/jwsioc_gpio3` - 高电平有效 - 常闭安全回路:正常时 I/O3 接 GND,按下急停或线路断开时回路断开 - 轮询周期:10ms - 消抖时间:50ms 运行示例: ```sh sudo ./GpioModuleTest --seconds 30 ``` ## CMake 交叉编译 测试目录可以独立编译,不需要先生成 `libGpioModule.a`。CMake 会直接编译 `Module/GpioModule/Src/GpioInput.cpp` 并链接测试程序。 使用已有 toolchain 文件: ```sh 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 ``` 也可以直接指定交叉编译器: ```sh 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 ``` 生成的程序位于: ```text build/GpioModuleTest-arm/bin/GpioModuleTest ``` 测试期间先保持 I/O3 与 GND 正常闭合,再按下急停或断开线路。预期输出: ```text 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`。 需要覆盖文件路径时: ```sh 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。