无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2252|回复: 7
打印 上一主题 下一主题

[求助] 关于查找USb大容量类设备问题

[复制链接]
跳转到指定楼层
1#
发表于 2010-12-15 15:51:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define  MAX_DEVICE_NUM 12
typedef struct dev
{
unsigned char   address;      
unsigned char   speed;      
std_dev_descriptor  dev_descriptor;     
std_conf_descriptor  conf_descriptor;     
std_interface_descriptor interfacef_descriptor;   
endpoint_info   *epi_ptr[ MAX_ENDPOINT_NUM ];
#ifdef STRING_DESCRIPTOR
unsigned short   *string_manufacturer;   
unsigned short   *string_product;     
unsigned short   *string_serialNum;   
#endif
void     *class_instance_ptr;   
unsigned char   topology_layer;   
}device_instance;
main()
{
device_instance * dviPtr;
        ...
while (1)
{  
  dviPtr = find_class_interface(MASS_CLASS_INTERFACE,0);   // 查找大容量类设备
    if(dviPtr)                                           //注释1
  {
                ...
                }
         }
}

device_instance *find_class_interface( unsigned char InterfaceClassID,  unsigned char DeviceIndex )
{
device_instance  *dviPtr;
int     i;

for ( i = 2; i <( MAX_DEVICE_NUM); i++ )
{
  if ( NULL == (dviPtr = find_device( i )) )
   continue;
  if ( check_interface_class_ID( dviPtr, InterfaceClassID ) )
  {
   if(DeviceIndex== 0x00)
    return ( dviPtr );
   else
    DeviceIndex --;
  }
}

return ( NULL );
}
device_instance *find_device( unsigned char address )
{
return ( device_list[ address ] );//注释2
}
device_instance  *device_list[ MAX_DEVICE_NUM ];//注释3
这是一个USB作为主机查找大容量类设备的部分代码,由于太长,不能全部附上.
问题:
1.if(dviPtr)//注释1
  if(dviPtr)总是不能返回True,导致不能执行Main函数以下代码;
2.find_device函数中注释2device_list[ address ]的address是一个变量,然而到了注释3device_instance  *device_list[
MAX_DEVICE_NUM ]定义的时候address 变成了常量MAX_DEVICE_NUM,这个又何解?

补充:以上是运行成功的可执行代码移植过来的!

[ 本帖最后由 2010husion 于 2010-12-16 08:31 编辑 ]
2#
发表于 2010-12-15 16:32:08 | 只看该作者

回复 #1 2010husion 的帖子

1、可以是有异常,扑捉一下看看。
2、常量的地址指针可以改变,这种间接的方式可改变常量的值。
回复

使用道具 举报

3#
发表于 2010-12-15 18:01:50 | 只看该作者
楼主这不是C语言吗。可惜我看不懂,帮你顶下!
回复

使用道具 举报

4#
发表于 2010-12-15 23:49:42 | 只看该作者
楼主这不是C语言吗。可惜我看不懂,帮你顶下
回复

使用道具 举报

5#
 楼主| 发表于 2010-12-20 08:27:41 | 只看该作者
原帖由 gongjc 于 2010-12-15 16:32 发表
1、可以是有异常,扑捉一下看看。
2、常量的地址指针可以改变,这种间接的方式可改变常量的值。


具体怎样捕捉,请版主指点一下,搞了很久没能搞定....谢谢
回复

使用道具 举报

6#
 楼主| 发表于 2010-12-20 08:35:40 | 只看该作者
ISP1161已经可以实现了读写U盘的功能,现在需要换成ISP1362实现读写U盘功能,在枚举开始先获设备8个字节设备描述符时,代码在发送字

的时候就停下来了,已经更改了ISP1362的ID,其它寄存器应该怎样更改,有没有做过ISP1362的朋友指教一下,谢谢了
回复

使用道具 举报

7#
 楼主| 发表于 2010-12-20 16:21:07 | 只看该作者
UP.............
回复

使用道具 举报

8#
 楼主| 发表于 2010-12-21 08:25:01 | 只看该作者
UP~~~~~~~~~~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-17 10:27

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表