注册 登录
编程论坛 Linux教室

关于LINUX配置描述符usb_parse_confiuratiion中一小段代码的疑问

发布于 2011-09-22 10:27, 831 次点击
本人模拟出内核usb_parse_confiuratiion函数中一小段代码如下:
static void Main(string[] args)  
       {           
            int[] ms;
            ms = new int[20];
            int[] nalts;
            nalts= new int[20];
            int[] inum;   
            inum=new int []{1,2,3,6,5,4,8,9,7,10};
          int i,n,p;
          n=0;
          p=0;
          do while (p < 10)
              {
                  for (i = 0; i < n; ++i)
                  {
                      if (ms[i] == inum[p])
                          break;
                  }
                  if (i < n)
                  {
                      ++nalts[i];
                  }
                  else
                  {
                      ms[n] = inum[p];
                      nalts[n] = 1;
                      ++n;
                  }
                  p++;
              } while (p < 10);

        }
    }
其中inum[p]表示不断收到的接口号,书上说ms[n]返回的是由接口序列号组成的数组,对应的nalts[n]是由各个接口号中的设置数组成的数组,但本人调试后发现ms[n]返回是不断收到的接口号,nalts[n]返回的全是1,(内核地址:drivers/usb/core/config.c中原代码如下:
for (i = 0; i < n; ++i) {
                if (inums[i] == inum)
                    break;
            }
            if (i < n) {
                if (nalts[i] < 255)
                    ++nalts[i];
            } else if (n < USB_MAXINTERFACES) {
                inums[n] = inum;
                nalts[n] = 1;
                ++n;
            }
求高人指点!


[ 本帖最后由 hb0zyj 于 2011-9-22 11:11 编辑 ]
6 回复
#2
pangding2011-09-22 21:36
问得太细了。不知道咱们坛子里有没有专门研究过你说的这方面东西的人。

不过从你写的那段代码里看不出什么东西呀。那些数组的值有其它程序会更改吗?
#3
embed_xuel2011-09-22 22:20
回复 楼主 hb0zyj
你代码里面的循环,n一直都是0,跟本不会循环,所以一直会走else分支,nalts[n]都等于1
#4
2011-09-23 08:53
此例来自于任桥伟《我是USB》中110页,有看这本书的吗?
#5
embed_xuel2011-09-23 13:13
回复 4楼 hb0zyj
不好意思,没看过,之前没看清楚代码

[ 本帖最后由 embed_xuel 于 2011-9-23 13:15 编辑 ]
#6
pangding2011-09-23 18:28
我想没多少人看过这本书。你就往后学呗,没准看着看着就清楚了。
#7
2011-09-24 13:21
以下是引用pangding在2011-9-23 18:28:00的发言:

我想没多少人看过这本书。你就往后学呗,没准看着看着就清楚了。
pangding果然有远见,往后看,问题真解决了,谢了。
1