USB设备描述符的POLL问题

硬面饽饽 2010-06-28 06:58:52
我poll几个usb fd的POLLOUT事件,结果这个事件无间隔的产生,导致死循环没有了阻塞点,CPU占用率狂飆。
到底是什么时候会产生POLLOUT事件?原来为了增大接收缓冲区,我提交了好多个接收URB,当我减少提交的URB数量的时候,CPU占用率有降低。
POLLOUT事件应该是有URB可以获取,即URB请求被应答完才产生的吧,怎么会像死循环一样不停产生?搞不懂了

for(;;)
{
//libusb_get_next_timeout(NULL,&timeout);
S32 i;
if(poll(ufds,nfds,10) < 0)/*600 ms*/
{
if(errno != EINTR)
{
MSG_ERR("poll error");
}
//continue;
}
for(i = 0;i < nfds; ++i)
{
if (ufds[i].revents & POLLOUT) {
/* Data may be written on device number i. */
}
if (ufds[i].revents & POLLHUP) {
/* A hangup has occurred on device number i. */

}
if (ufds[i].revents & POLLIN) {
/* A hangup has occurred on device number i. */
//libusb_handle_events_timeout(NULL,&timeout);
}
libusb_handle_events_timeout(NULL,&timeout);
ufds[i].revents = 0;
}
}
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
硬面饽饽 2010-07-02
  • 打赏
  • 举报
回复
废弃LIBUSB,直接写驱动
硬面饽饽 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 taoshahai 的回复:]

你先读或者先写,然后再poll吧!没读没写你查什么东西啊
[/Quote]
读写的代码省略了
taoshahai 2010-06-30
  • 打赏
  • 举报
回复
你先读或者先写,然后再poll吧!没读没写你查什么东西啊
曹大夯 2010-06-29
  • 打赏
  • 举报
回复
你这个是USB设备的驱动的代码还是上层应用程序的代码?

对应的驱动代码是怎么处理POLLOUT的丫?

对应的URB的相关代码也需要贴一下大家才知道你在说什么。
曹大夯 2010-06-29
  • 打赏
  • 举报
回复
没有用过libusb,不了解。

如果想用好USB设备,对USB协议还是需要有充分理解。一旦对USB协议有了充分了解,对USB系统也比较了解之后,估计用libusb也能实现你想做的事。不然,一旦碰到问题,就不知道怎么办了。
硬面饽饽 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huntercao 的回复:]

你这个是USB设备的驱动的代码还是上层应用程序的代码?

对应的驱动代码是怎么处理POLLOUT的丫?

对应的URB的相关代码也需要贴一下大家才知道你在说什么。
[/Quote]
这个代码用libusb写的,传说中的在应用层写USB驱动,看来不是那么好用.驱动的POLL方法应该在usbcore里边

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧