阅读:4462回复:18
哪位高手知道若几个应用程序同时访问一个USB设备会怎样?
哪位高手知道若几个应用程序同时访问一个USB设备会怎样?
应如何处理?谢谢! |
|
最新喜欢:abei11
|
沙发#
发布于:2003-09-22 15:51
一句话,不好整
你遇到这种情况了吗? |
|
|
板凳#
发布于:2003-09-22 16:22
只知道一个应用程序的时候,多的时候不知道,关注!
|
|
地板#
发布于:2003-09-23 08:40
应该没问题吧,我觉得。
|
|
地下室#
发布于:2003-09-23 08:43
既然这样,给个思路看看?
|
|
5楼#
发布于:2003-09-23 08:53
好象没有问题。
刚刚试了一下,用2个程序,一个是demo板带的,一个是我写的,都可以用,而且我的程序发的数据,demo板的可以收到,没有问题。 不知道,这么理解对否? |
|
6楼#
发布于:2003-09-23 09:40
都像你这样整都乱套了,甲发的数据,被乙收到,能对吗?
我是这样看的,同一个设备若要有多个应用访问,应用层应该访问不同的端点,各自收发各自的缓存,这样做理论上没有什么问题。 |
|
|
7楼#
发布于:2003-09-23 11:13
我使用的没有多大问题,每个应用程序都能控制设备,但是,在出现设备故障问题时,程序关闭句柄有问题.另外设备复位(开关电)后识别成一个新设备.(我的驱动支持8各设备,第一个为XXX-0,程序不释放,关开电后识别为XXX-1).
|
|
|
8楼#
发布于:2003-09-23 17:25
都像你这样整都乱套了,甲发的数据,被乙收到,能对吗? 嘿嘿,我只是做个实验,不是要这两个程序一起用。 起码说明不会有冲突。 哈哈 |
|
9楼#
发布于:2003-09-25 10:21
我刚开发USB,看了一些资料,不过还没有动手,我想这和WINDOWS处理消息有一样的机制,多个应用程序发出对单个设备的操作请求,在驱动层,WINDOWS会将这些请求打包并序列化,然后依次发送给物理设备,但是在应用程序看来,大家都在一起运行一样.
不知道我理解的对不对?高手来推敲推敲. |
|
10楼#
发布于:2003-09-29 11:35
USB有提供多个应用程序访问同一个device的功能。要想做到符合USB的标准,就需要用到Interface。具体做法是在描述符里做成 一个device,一个configuration, 多个Interface。 这样操作系统会根据你的Interface给你返回不同的句柄。
例子:我曾经做过一个模拟USB键盘的东西。因为操作系统把它当作标准键盘,并且以独占的方式打开了这个USB键盘。所以此时其他应用程序已经不能再打开这个USB键盘。所以我定义了2个interface,一个interface是定义成标准usb键盘,另外一个interface定义为普通HID。 这样操作系统打开了usb键盘这个interface,而我的应用程序打开hid interface。 我透过HID把数据发出去,然后系统以键盘的方式把它读进来。这样就可以做到用你的应用程序来模拟键盘输入。 |
|
11楼#
发布于:2003-09-29 22:22
好像驱动程序里面有个“共锁”机制吧。翻翻驱动程序的书。
|
|
12楼#
发布于:2003-09-30 09:11
我感觉对于同一设备的访问驱动会用不同的标式,每个应用程序有各自机制,是并行的。当你使用某一程序时,打开自有的通道,别的通道是Lock的。当你同时使用多个程序访问同一设备,它会自动识别,数据也会发到各程序仲。正如经常使用的busbound,我们在使用usb时,它也会识别到usb不同设备,并且捕抓到数据。这就说明可行的。
|
|
13楼#
发布于:2003-10-07 03:00
一般来说,在driver里面,MS的driver会把packets给serial,保证每个packet/urb都是按照submit的先后而传输,这可以看作是物理层面;而我们在应用的时候,往往有自己的协议,可以看作是逻辑层(类似ISO),如果要保证这个层的数据的连续,当然要靠自己的机制来保证。我们通常是用一个dll,app都是通过这个dll来调用driver,然后在dll里面用mutex互锁来保证每个process的一次通讯不会受到另外一个process的干扰。
这只是我经常用到的方法,欢迎大家就此问题讨论 :) |
|
|
14楼#
发布于:2003-10-07 09:39
根据我的理解,DLL在每个进程调用的时候是在内存中作一个拷贝,所以很多应用程序调用同一DLL不会出现问题,是因为他们都是在调用自己的DLL(原DLL在内存中的拷贝)。而USB不同,如果你同时运行同一个应用程序的两个进程,这两个进程当然访问USB的方式是相同的,但可能在执行不同的任务,如果他们同时向驱动发送不同的任务,驱动将其发向USB总线,USB固件如何识别他们是哪一个进程发来的呢,如果不识别会不会乱套?
|
|
|
15楼#
发布于:2003-10-07 22:00
re:如果他们同时向驱动发送不同的任务,驱动将其发向USB总线U,SB固件如何识别他们是哪一个进程发来的呢,如果不识别会不会乱套?
驱动程序(有些驱动不提供这样的功能)会将任务排成一个队列,依次向下发送到固件,所以固件不会遇到要同时处理两个任务的情况。但是固件无法知道它正在处理的任务是那个进程发来的,驱动程序则知道。 我觉得rayyang2000提到的方法不错 |
|
16楼#
发布于:2003-10-08 11:21
对于这个问题,我想说一下,因为USB的上下位机我都是一行一行代码写过来的,其实多个应用程序在上位机对同一个设备操作,对于上位机来说没什么问题,前面rayyang2000说的是对的。对于下位机,大部分下位机也就是我们要用到的usb设备大部分都是不支持多任务的,或者说大部分都是裸机跑程序,因此下位机对于上面的令牌都一视同仁,而且必须在上一个处理结束之后才能开始下一个处理,因此理论上假如你的设备的应用是单一的,目前的USB设备基本这样,那肯定没有问题,U盘不就是这样吗;假如你的应用不是单一的,像我现在做的这个设备,市面上你根本没有见到过的,一定会乱套,因为第一个应用程序发送命令后,下一个命令是从下位机取数据,而第一个命令后会准备数据等待下一个收数据的令牌,假如此时上位机的另一个应用程序发了收数据的令牌,不就乱套了吗。所以说,这个问题其实是有个先决条件的,那就是看你的设备是怎么应用的,跟你的应用有很大关系。
|
|
|
17楼#
发布于:2003-10-08 15:08
受益匪浅!系统老是显示我没登陆,不知道怎么给分,等好了我再给各位分吧,谢谢各位!
不好意思,好像只能给一次分,而且我有80分系统只允许我最多给10分,因此很多回答也很好的不能给分,想多给点也不行,总之谢谢各位了,还往各位今后不吝指教 [编辑 - 10/9/03 by dragon_hn] |
|
|
18楼#
发布于:2003-10-09 09:25
好象没有问题。 我也做了该方面的测试(虚拟驱动),一个a异步读,另一个b同步写,b写的记录,a可以读取到。但是为什么a的不管是同步还是异步写而a自己就是读不到呢!? |
|