实际上我有一个功能来监视我的beaglebone上的GPIO。我将该功能设置为在数字输入端口发生事件时发送用户信号(SIGUSR1
)(外部中断),但该功能必须处于循环中。我可以在一个线程或fork()
中插入该函数,但我认为这不是优雅的解决方案。
我想知道C语言中是否存在任何方式/功能/特性,以便将监视设置为在前台运行(更高优先级)而不需要放入循环,例如{{1只声明一次并运行(保持监控)而不需要循环。
我不知道是否可以使用beaglebone / linux,但使用PIC时,“Streaming Parallel Port”(SPP)会调用此功能。
答案 0 :(得分:0)
我不知道你如何监控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最高优先级的线程,以便不丢失信息。