实际上,我有一个功能可以监控 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/