2026-08-04 14:23:07 +08:00

79 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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。