Linux 如何将硬件中断连接到Qt Emit?

Linux 如何将硬件中断连接到Qt Emit?,linux,qt4,embedded,Linux,Qt4,Embedded,我正在构建和嵌入应用程序,我宁愿使用硬件中断侦听器,然后每10秒轮询一次,以消耗cpu周期 显然,这是可以做到的,因为有键盘、鼠标和网络等硬件中断的侦听器。我最终想做的是让硬件中断触发Qt发射信号 提前谢谢 示例: 硬件中断->读取端口()->发射(值) 更新 我认为这样做会奏效,但我想听听有这方面经验的人的意见 mSN = new QSocketNotifier; // defined in .h QFile file("/dev/testDriver"); if(file.open(QFil

我正在构建和嵌入应用程序,我宁愿使用硬件中断侦听器,然后每10秒轮询一次,以消耗cpu周期

显然,这是可以做到的,因为有键盘、鼠标和网络等硬件中断的侦听器。我最终想做的是让硬件中断触发Qt发射信号

提前谢谢

示例:
硬件中断->读取端口()->发射(值)

更新
我认为这样做会奏效,但我想听听有这方面经验的人的意见

mSN = new QSocketNotifier; // defined in .h
QFile file("/dev/testDriver");
if(file.open(QFile::ReadOnly)) {
  QSocketNotifier mSN(file.handle(), , QSocketNotifier::Read);
  mSN.setEnabled(true);
  connect(mSN, SIGNAL(activated(int)), &this, SLOT(readyRead()));
}

由于不了解应用程序的任何其他信息,可能存在非中断解决方案

创建QObject的子类并将其移动到唯一的QThread

在对象中,调用startTimer(100)

在timerEvent()中,轮询硬件。根据需要发出信号


在Qt4中,信号和插槽在线程之间自动排队。

谢谢ken,但我正试图避免这种排队。硬件中断仅由内核处理。您可以制作一个设备驱动程序,将它们作为输出发送。Qt是应用程序级的,只知道文件描述符和Unix信号。是的-您需要一个驱动程序,正如@BasileStarynkevitchI所建议的那样。了解在内核空间中运行的硬件驱动器的概念,包括读、写、ioctrl等。问题是如何避免轮询,而不是内核与用户空间。