79 lines
2.5 KiB
Markdown
79 lines
2.5 KiB
Markdown
# 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。
|