c - Beaglebone 中的数字输入端口 (GPIO) 流式传输?

标签 c interrupt beagleboneblack gpio interrupt-handling

实际上,我有一个功能可以监控 beaglebone 上的 GPIO。我将该函数设置为当数字输入端口上发生事件(外部中断等)时发送用户信号(SIGUSR1),但该函数必须处于循环中。我可以将该函数插入到线程中或 fork() 中,但我认为这不是一个优雅的解决方案。

我想知道 C 语言中是否存在任何现成的方式/函数/功能,可以将监控设置为在前台运行(更高优先级),而不需要放入循环,例如 setitimer 仅声明一次并运行(持续监控),无需循环。

我不知道 beaglebone/linux 是否可以实现,但对于 PIC,此功能由“流并行端口”(SPP) 调用。

最佳答案

我不知道你如何监控gpio,但要从用户空间使用gpio (参见https://www.kernel.org/doc/Documentation/gpio/sysfs.txt) 您可以使用 select 和 poll,以最小超时时间调用它 可以在没有循环的情况下工作,或者如果您使用 Qt/gtk,您可以在其中插入 GPIO 检查 该框架的事件循环。

如果您只想使用 C,第二种变体是使用 setjmp/longjmp, 没有 C++/Boost,

此外,如果您谈到计时器,您可以使用 man 2 Alarm 来实现周期性计时器,

对我来说最简单的方法是使用 pthreads,并设置监视 gpio 最高优先级的线程,以免丢失信息。

关于c - Beaglebone 中的数字输入端口 (GPIO) 流式传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536211/

相关文章:

C 通过引用传递结构

c++ - 为在 BeagleBone Black 上运行的 ARM 编译时,应用程序 boost::thread 卡在互斥锁上

beagleboneblack - 与 opkg 进行包同步

c - 在 scanf 中没有 `&` 的情况下 %s 在 c 中如何工作?

c - 从信号处理程序上下文获取 ARC 平台的回溯跟踪

c - 我不明白这种指针的用法

java - InterruptedIOException 是否将线程的 Interrupted 标志设置为 true?

c - "Trapping"Windows用户空间进程自己的sysenter调用

linux - 中断向量中是否有系统调用服务程序?

linux - 如何从内核代码 (BeagleBone Black) 访问或枚举可用的 LED?