79 lines
2.5 KiB
Markdown
Raw Normal View History

2026-08-04 14:23:07 +08:00
# 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。