日期:2014-05-16  浏览次数:20651 次

任桥伟《我是USB》usb_parse_confiuratiion中一小段代码的疑问
关于LINUX配置描述符usb_parse_confiuratiion中一小段代码的疑问
本人模拟出内核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;
  }
求高人指点,为什么nalts[n]返回的全是1?此例来自任桥伟《我是USB》110页



------解决方案--------------------
因为你碰到的每个interface都只有一个setting