gpt4 book ai didi

linux - 由 bash 中的 GPIO 状态变化触发

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:04 26 4
gpt4 key购买 nike

我有一个 GPIO 引脚,其值在 sysfs 节点 /sys/class/gpio/gpioXXXX/value 中表示,我想检测此 GPIO 值的变化别针。根据the sysfs documentation你应该使用 poll(2)select(2)为此。

然而,pollmessage 似乎都只能作为系统调用使用,而不是来自 bash。是否有某种方法可用于通过 bash 脚本中 GPIO 引脚功能的状态更改来触发?

我的意图是不进行(半)忙等待或用户态轮询。我还想简单地从 bash 中执行此操作,而不必使用另一种语言。我不打算在整个项目中坚持使用 bash,但我确实想在第一个版本中使用它。编写一个简单的 C 程序以从 bash 调用是有可能的,但在这样做之前,我想知道我是否没有遗漏什么。

最佳答案

是的,您将需要一个 C 或 Python 帮助程序——并且您可能会考虑完全放弃这个项目的 bash。

参见 this gist对于这样一个助手的实现(名为“wfi”、“watch-for-interrupt”,修改自 a Raspberry Pi StackExchange question 的答案。


也就是说:

如果您想要(半)高效地使用 shell 脚本监控 GPIO 信号变化,您将需要使用 poll() 的 C 帮助程序,并在每次发生变化时写入 stdout发生值得注意的变化。鉴于此,您可以编写类似于以下内容的 shell 循环:

while IFS= read -r event; do
echo "Processing $event"
done < <(wfi /sys/class/gpio/gpioXXXX/value)

以这种方式使用流程替换可确保您的 monitor-gpio-signal 助手的启动成本只需支付一次。注意一些注意事项:

  • 特别是如果循环体内的任何东西调用外部命令(而不是单独依赖 shell 内置函数),这仍然比使用用 C、Go 或什至其他语言编写的程序慢得多- 相对较慢的语言,例如 Python。

  • 如果 shell 脚本还没有准备好接收写入,该写入可能会无限期地阻塞。 pv 之类的工具向您的管道添加缓冲区可能很有用:

    done < <(wfi "name" | pv -q -B 1M)

    ...例如,将建立一个 1MB 的缓冲区。

关于linux - 由 bash 中的 GPIO 状态变化触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com