c++ - 使用 C++ 处理 GPIO 按钮事件

标签 c++ arm gpio

大家好,我需要一些帮助。我正在 ARM 中制作一个 C++ 嵌入式应用程序。我需要获得一个按钮事件,我在互联网上寻找,我发现最好的方法是中断。我知道我可以通过终端设置一个引脚,例如“echo raise >/sys/.../gpio/gpio81/edge”。但我需要知道发生中断时如何从我的 C++ 应用程序中获取中断,我只需要一些示例,因为我不知道是否必须使用一些特殊的库。

谢谢大家,希望有人能帮助我。

最佳答案

手动“机械”按钮需要防抖。这一点,以及按下按钮不需要高 I/O 性能的事实,意味着 GPIO 中断是一种尴尬的过度杀伤力。当然这是可以做到的,但是使用定时器中断轮询 GPIO 端口、存储输入状态并与之前的状态进行比较会更容易、更安全。如果 GPIO 线已更改足够数量的样本的状态,则您将获得按钮事件并可以对其进行操作。

如果您使用的是任务操作系统,您可以 Hook 现有的计时器中断 - 它只是处理 GPIO 轮询的几条指令,因此您不会看到任何明显的性能影响。如果确定按钮已被按下/释放,您可以发出信号量信号,以便等待线程可以快速处理该事件。

关于c++ - 使用 C++ 处理 GPIO 按钮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823279/

相关文章:

Python 不重复连续行

python - Raspberry PI Python WiringPi 中断语法

c++ - 在 C++ 中解决 Project Euler 问题的最佳 bignum 库?

c++ - 是否可以将函数指针转换为整数?

optimization - llvm 使用库函数进行优化

java - 在带有 ARM11 的设备中安装 JVM

c - void osSleep(tU32 ticks) - 它是如何工作的(微 Controller 中的定时器)?

C++:在 .lib 成功构建后在 VS2010 中创建 .dll 时出现 "unresolved external symbol"

.net - 在 .NET 和 C++ 中运行进程

尝试使用 armhf arch 安装时出现 Docker alpine-pkg-glibc 错误