- 论坛徽章:
- 0
|
我用USB驱动框架改写了一个与ARM开发板通信的驱动,但是发现从设备读数据时速度很慢。
我把开发板拿到windows下读,速度很快,很正常,如果windows下的帧率是50帧的话,在linux下我用这个驱动征率只有10帧左右!
读得代码如下:- static ssize_t device_driver_read(struct file *filp,char *user_buffer,size_t count,loff_t *ppos)
- {
- struct device_device *dev;
- int retval = 0;
- int readed_size=0;
- int bytes_read;
- dev = (struct usb_skel *)filp->private_data;
-
- while(1)
- {
- retval = usb_bulk_msg(dev->device,
- usb_rcvbulkpipe(dev->device, dev->bulk_in_endpoint_addr),
- dev->bulk_in_buffer,
- dev->bulk_in_size,
- &bytes_read, 1000);
-
- if (retval==0)
- {
- if(readed_size+bytes_read<=count)
- {
- if(bytes_read>0)
- {
- if (copy_to_user(user_buffer+readed_size, dev->bulk_in_buffer, bytes_read))
- {
- err("copy_to_use error");
- retval = -EFAULT;
- break;
- }
- }
- }
- readed_size += bytes_read;
- if(bytes_read<64)
- {
- retval = readed_size;
- break;
- }
- }
- else
- {
- err("usb_bulk_msg error:%d",retval);
- break;
- }
- }
- return retval;
- }
复制代码 我测了一下usb_bulk_msg拿一个包最大是64字节,要消耗3毫秒左右的时间,如果我一次拿6400字节的数据,那就要用usb_bulk_msg重复拿100个包,发现这样算下来,速度才21KB/S左右,为什么速度会这么慢?
是我的read函数写错了吗?如果要提高速度应该怎么写?
或者说如果一次要拿大于64字节的数据,要怎么写read函数? |
|