dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
阅读:4462回复:18

哪位高手知道若几个应用程序同时访问一个USB设备会怎样?

楼主#
更多 发布于:2003-09-22 15:21
哪位高手知道若几个应用程序同时访问一个USB设备会怎样?
应如何处理?谢谢!

最新喜欢:

abei11abei11
www.dragon-2008.com 欢迎交流
usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-22 15:51
一句话,不好整
你遇到这种情况了吗?
驱网是你们的,也是我们的,归根结底还是大家的!
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-22 16:22
只知道一个应用程序的时候,多的时候不知道,关注!
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-09-23 08:40
应该没问题吧,我觉得。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-09-23 08:43
既然这样,给个思路看看?
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-09-23 08:53
好象没有问题。

刚刚试了一下,用2个程序,一个是demo板带的,一个是我写的,都可以用,而且我的程序发的数据,demo板的可以收到,没有问题。

不知道,这么理解对否?

usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-09-23 09:40
都像你这样整都乱套了,甲发的数据,被乙收到,能对吗?
我是这样看的,同一个设备若要有多个应用访问,应用层应该访问不同的端点,各自收发各自的缓存,这样做理论上没有什么问题。
驱网是你们的,也是我们的,归根结底还是大家的!
wgq
wgq
驱动小牛
驱动小牛
  • 注册日期2001-07-23
  • 最后登录2013-12-09
  • 粉丝3
  • 关注0
  • 积分40分
  • 威望342点
  • 贡献值0点
  • 好评度97点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-09-23 11:13
我使用的没有多大问题,每个应用程序都能控制设备,但是,在出现设备故障问题时,程序关闭句柄有问题.另外设备复位(开关电)后识别成一个新设备.(我的驱动支持8各设备,第一个为XXX-0,程序不释放,关开电后识别为XXX-1).
qq
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-09-23 17:25
都像你这样整都乱套了,甲发的数据,被乙收到,能对吗?
我是这样看的,同一个设备若要有多个应用访问,应用层应该访问不同的端点,各自收发各自的缓存,这样做理论上没有什么问题。

嘿嘿,我只是做个实验,不是要这两个程序一起用。 起码说明不会有冲突。 哈哈

wangxin_china
驱动中牛
驱动中牛
  • 注册日期2003-03-28
  • 最后登录2008-09-30
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-09-25 10:21
我刚开发USB,看了一些资料,不过还没有动手,我想这和WINDOWS处理消息有一样的机制,多个应用程序发出对单个设备的操作请求,在驱动层,WINDOWS会将这些请求打包并序列化,然后依次发送给物理设备,但是在应用程序看来,大家都在一起运行一样.

不知道我理解的对不对?高手来推敲推敲.
kermit
驱动小牛
驱动小牛
  • 注册日期2002-11-29
  • 最后登录2010-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
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把数据发出去,然后系统以键盘的方式把它读进来。这样就可以做到用你的应用程序来模拟键盘输入。
lvgx_9
驱动牛犊
驱动牛犊
  • 注册日期2003-08-13
  • 最后登录2004-12-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-09-29 22:22
  好像驱动程序里面有个“共锁”机制吧。翻翻驱动程序的书。
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-09-30 09:11
我感觉对于同一设备的访问驱动会用不同的标式,每个应用程序有各自机制,是并行的。当你使用某一程序时,打开自有的通道,别的通道是Lock的。当你同时使用多个程序访问同一设备,它会自动识别,数据也会发到各程序仲。正如经常使用的busbound,我们在使用usb时,它也会识别到usb不同设备,并且捕抓到数据。这就说明可行的。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-10-07 03:00
一般来说,在driver里面,MS的driver会把packets给serial,保证每个packet/urb都是按照submit的先后而传输,这可以看作是物理层面;而我们在应用的时候,往往有自己的协议,可以看作是逻辑层(类似ISO),如果要保证这个层的数据的连续,当然要靠自己的机制来保证。我们通常是用一个dll,app都是通过这个dll来调用driver,然后在dll里面用mutex互锁来保证每个process的一次通讯不会受到另外一个process的干扰。

这只是我经常用到的方法,欢迎大家就此问题讨论 :)
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-10-07 09:39
根据我的理解,DLL在每个进程调用的时候是在内存中作一个拷贝,所以很多应用程序调用同一DLL不会出现问题,是因为他们都是在调用自己的DLL(原DLL在内存中的拷贝)。而USB不同,如果你同时运行同一个应用程序的两个进程,这两个进程当然访问USB的方式是相同的,但可能在执行不同的任务,如果他们同时向驱动发送不同的任务,驱动将其发向USB总线,USB固件如何识别他们是哪一个进程发来的呢,如果不识别会不会乱套?
www.dragon-2008.com 欢迎交流
custjcy
驱动牛犊
驱动牛犊
  • 注册日期2002-03-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-10-07 22:00
re:如果他们同时向驱动发送不同的任务,驱动将其发向USB总线U,SB固件如何识别他们是哪一个进程发来的呢,如果不识别会不会乱套?

驱动程序(有些驱动不提供这样的功能)会将任务排成一个队列,依次向下发送到固件,所以固件不会遇到要同时处理两个任务的情况。但是固件无法知道它正在处理的任务是那个进程发来的,驱动程序则知道。

我觉得rayyang2000提到的方法不错
usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-10-08 11:21
对于这个问题,我想说一下,因为USB的上下位机我都是一行一行代码写过来的,其实多个应用程序在上位机对同一个设备操作,对于上位机来说没什么问题,前面rayyang2000说的是对的。对于下位机,大部分下位机也就是我们要用到的usb设备大部分都是不支持多任务的,或者说大部分都是裸机跑程序,因此下位机对于上面的令牌都一视同仁,而且必须在上一个处理结束之后才能开始下一个处理,因此理论上假如你的设备的应用是单一的,目前的USB设备基本这样,那肯定没有问题,U盘不就是这样吗;假如你的应用不是单一的,像我现在做的这个设备,市面上你根本没有见到过的,一定会乱套,因为第一个应用程序发送命令后,下一个命令是从下位机取数据,而第一个命令后会准备数据等待下一个收数据的令牌,假如此时上位机的另一个应用程序发了收数据的令牌,不就乱套了吗。所以说,这个问题其实是有个先决条件的,那就是看你的设备是怎么应用的,跟你的应用有很大关系。
驱网是你们的,也是我们的,归根结底还是大家的!
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-10-08 15:08
受益匪浅!系统老是显示我没登陆,不知道怎么给分,等好了我再给各位分吧,谢谢各位!
不好意思,好像只能给一次分,而且我有80分系统只允许我最多给10分,因此很多回答也很好的不能给分,想多给点也不行,总之谢谢各位了,还往各位今后不吝指教

[编辑 -  10/9/03 by  dragon_hn]
www.dragon-2008.com 欢迎交流
linshuhua
驱动牛犊
驱动牛犊
  • 注册日期2003-03-12
  • 最后登录2003-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-10-09 09:25
好象没有问题。

刚刚试了一下,用2个程序,一个是demo板带的,一个是我写的,都可以用,而且我的程序发的数据,demo板的可以收到,没有问题。

不知道,这么理解对否?

 


我也做了该方面的测试(虚拟驱动),一个a异步读,另一个b同步写,b写的记录,a可以读取到。但是为什么a的不管是同步还是异步写而a自己就是读不到呢!?
游客

返回顶部