无忧启动论坛

标题: 关于查找USb大容量类设备问题 [打印本页]

作者: 2010husion    时间: 2010-12-15 15:51
标题: 关于查找USb大容量类设备问题
#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 编辑 ]
作者: gongjc    时间: 2010-12-15 16:32
标题: 回复 #1 2010husion 的帖子
1、可以是有异常,扑捉一下看看。
2、常量的地址指针可以改变,这种间接的方式可改变常量的值。
作者: 2010fengyun    时间: 2010-12-15 18:01
楼主这不是C语言吗。可惜我看不懂,帮你顶下!
作者: 2010yzxwxl    时间: 2010-12-15 23:49
楼主这不是C语言吗。可惜我看不懂,帮你顶下
作者: 2010husion    时间: 2010-12-20 08:27
原帖由 gongjc 于 2010-12-15 16:32 发表
1、可以是有异常,扑捉一下看看。
2、常量的地址指针可以改变,这种间接的方式可改变常量的值。


具体怎样捕捉,请版主指点一下,搞了很久没能搞定....谢谢
作者: 2010husion    时间: 2010-12-20 08:35
ISP1161已经可以实现了读写U盘的功能,现在需要换成ISP1362实现读写U盘功能,在枚举开始先获设备8个字节设备描述符时,代码在发送字

的时候就停下来了,已经更改了ISP1362的ID,其它寄存器应该怎样更改,有没有做过ISP1362的朋友指教一下,谢谢了
作者: 2010husion    时间: 2010-12-20 16:21
UP.............
作者: 2010husion    时间: 2010-12-21 08:25
UP~~~~~~~~~~~~~




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3