4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2106回复:21

D12初始化的问题

楼主#
更多 发布于:2003-07-29 15:35
我想问一个低级的问题:
如果我想在我得主循环之前将usb的初始化执行完,然后再进我得主循环,这样可以吗?也就是说如果知道usb在初始化完之后发送过来一个什么数据我就可以退出,这样就好了,是不是在bus hond中捕捉到的最后的数据阿?
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-29 16:36
当然要先初始化了,怎么可能不初始化就做循环呢?USB枚举成功后在主机就能看出来了。枚举不成功usb芯片是无法工作的。
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-29 17:02
flytomoon:
   我的意思是这样的,我的主程序有一个死循环,usb的初始化也有一个循环检测的过程,我想在我的死循环之前完成usb的初始化,也就是在枚举完成的时候置一个标志位,当检测当这个标志位的时候,就让它退出,执行下面的程序了,这里的关键就是要找到枚举的最后一个步骤是什么。我用bushond观察到最后一个是getinterface,我再那里设置一个标志,就退出usb的初始化了,可是好像不行,看起来初始化成功了,可是不能收发数据的。不知道为什么
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-29 17:29
我明白你的意思了,想法是对的,你试一下如果单独枚举的时候成功吗,然后再考虑标志位的设置,别是枚举本身就没成功。
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-29 18:08
我的设备管理器里面的usb设备都是好的阿,而且我用bushond获得的数据和枚举成功的时候获得的数据是一样的阿,但是我知道这里应该还是有些地方不一样的,我再看看了。呵呵,我现在发现如果专用usb的程序来这样做的话,是可以得,发送数据也可以,可能是我得主程序的原因了,可能那程序全都乱了,根本不按照逻辑来,不是我写的,只好叫写程序的人来改了。
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-29 18:25
应该是这样的,你的想法没有什么问题,应该是可行的。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-29 22:17
其实最简单的方法是把初始化的枚举过程都放到中断程序中去!
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-30 10:19
我现在初始化之后,设备管理器中已经出现了我得设备,前面也没有叹号,可是应用程序(周立功的那个修改的)会出现一个“按键已释放”的消息,然后就不能通信了,这是为什么呢?我是按照我得那个方法通过枚举的,是不是我对这个枚举的了解还不是很清楚啊?多谢指教了
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-30 10:50
按键已释放是什么意思啊?
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-07-30 11:01
我也不知道啊,就是周立功提供的一个测试程序里面的阿,好像是检测下位机的端点1的,端点一是做键盘用的,可是我这里并没有用到端点一啊
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-30 11:09
你用修改前的程序试试看是什么结果。
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-30 16:57
谢谢大家的帮助,我得问题已经解决了,任兄,我用你的方法做的枚举是成功了,并且数据传输率也可以,但是嵌入到我得程序里面去就不行,这个可能是堆栈溢出的原因,刘工说在中断里面做是可以的,只是单片机的效率会很低,我看了一下,每次进中断的时候都有好多的变量要保护。
我又想起了一个问题了,就是如果下位机还没有将数据写道端点缓冲区里面,这时候上位机已经开始读数了,上位机就会死掉,这个问题怎么解决呢?好像是要修改驱动吧?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-30 19:05
上位机不是死掉,是一直在等待!可是如过你一直不发数据那就一直等待下去了,你可以在ReadFile()和WriteFile()函数的最后一个参数增加超时控制,或者在驱动里的D12_CallUSBD函数里增加超时控制!
LARGE_INTEGER TimeOut;
TimeOut.QuadPart = 30000000;//三秒钟超时
……
status = KeWaitForSingleObject(
                    &event,
                    Suspended,
                    KernelMode,
                    FALSE,
                    &TimeOut);

……
这是我昨天才修改的,因为手上没有硬件,所以还没来得及调试,不知道可行不可行。
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-31 09:00
好的,我试试看了,好像我以前改过这里的
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-31 09:01
好的,我试试看了,好像我以前改过这里的,后来又改过来了,再试试了
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-07-31 12:04
我记起来了,上次在这里加超时处理的时候,一装上驱动,机子就重起了,好像是改变了这个函数的级别,这样做不行,要么肯定还要做一些其他的处理
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-07-31 12:14
是这样呀,那能不能在读写函数上增加超时控制呢?就是readfile()或者deviceiocontrol(),函数里的最后一个参数也是超时控制的。
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-07-31 12:47
我看过这个函数了,最后一个参数,是把?我觉得如果在这里加超时处理的话,应该是要驱动支持的,不然还是没有用的,因为readfile()是在驱动里面的没有返回,所以不管上位机怎么处理都是没有用的,这只是我得想法,不知道对不对
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-07-31 12:58
我也没用过,我这边有个人说在驱动里设置一个event,可是我不知道到底该怎么做。 :(
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-07-31 13:02
呵呵,我也觉得肯定有什么东西需要设置的,可是我也不会,我问过一个写过驱动的人,他说他也没有处理过这个,不过他说在irp中本来就有超时处理的,是不是在初始化的时候,也就是在ADDDevice的时候初始化这个irp就可以了那?我只是这样想了。
上一页
游客

返回顶部