【问题标题】:Is ther an IRQ for a virtual serial port like ttyUSB0 on linux?linux上的虚拟串行端口(如ttyUSB0)是否有IRQ?
【发布时间】:2012-09-01 10:05:30
【问题描述】:

我在Linux下从虚拟串口读取数据(连接的设备是xbee模块)

此时读取是通过检查端口缓冲区的线程完成的。 但是在很多设备的情况下,这并不好,因为一个端口上的数据可能每毫秒出现一次,另一个端口每秒出现一次,因此它成为 CPU 的负担。

我想知道是否有类似中断的东西,只有在新数据可用时才会触发事件(我知道这个原理适用于微控制器)。

如何在 C++ 中实现这一点?

我不知道如何使用这些信息,因为我缺乏相关知识。如果我有这样的事情:

while(1){

   int n= PollComport(comport_number, buf, 4095);
   if(n>0){
   //make somemthing with the new data
   }
}

我想删除 while 循环。我在哪里以及如何使用 epoll_wait?

【问题讨论】:

  • 如果您可以将PollComport 替换为完全符合您要求的函数,那么该函数究竟会做什么?

标签: usb serial-port virtual-serial-port irq


【解决方案1】:

这不是你的问题。操作系统就是这样做的。只需使用阻塞读取或某种 I/O 多路复用(如 selectepoll_wait)。你不需要做任何特别的事情。

【讨论】:

  • 如果你想要阻塞语义,只需从 OpenComport 中删除 | O_NDELAY
  • 我找到了,我正在搜索:关键字是基于偶数的串行端口驱动程序:sourceforge.net/projects/qspd
  • 是的,使用你想要的代码可能是个好主意。
猜你喜欢
  • 2010-09-08
  • 2011-01-08
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2017-04-02
  • 2014-01-28
  • 2023-03-05
  • 2015-09-16
相关资源
最近更新 更多