Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB на AT91SAM7A3
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
shrek
Вопрос в общем вот в чем...
когда хост требует от меня отправить дескриптор конфигурации во второй раз (первый раз он просил только дескриптор конфигурации размером 9 байт) то я ему отправляю вот такую вот структурку
Код
//---структура конфигурации-----------------------------------------------------
const struct
     {
     //---Структура дескриптора конфигурации------------------------------------
     struct
          {
          unsigned char       bLength;              //длина дескриптора
          unsigned char       bDescriptorType;      //тип дескриптора
          unsigned short int  wTotalLength;         //общий обьем данных, возвращаемых для данной конфигурации
          unsigned char       bNumInterfaces;       //кол-во интерфейсов поддерживаемых данной конфигурацией
          unsigned char       bConfigirationValue;  //идентификатор конфигурации
          unsigned char       iConfiguration;       //индекс дескриптора стороки
          unsigned char       bmAttributes;         //характеристики конфигурации
          unsigned char       MaxPower;             //код мощности, потребляемый устройством
          } USB_CONFIGURATION_DESCRIPTOR;
     //---Структура дескриптора интерфейса--------------------------------------
     struct
          {
          unsigned char       bLength;              //Длина дескриптора
          unsigned char       bDescriptorType;      //Тип дескриптора
          unsigned char       bInterfaceNumber;     //Номер данного интерфейса
          unsigned char       bAlternateSetting;    //Альтернативный номер интерфейса
          unsigned char       bNumEndpoints;        //Число конечных точек для интерфейса без 0
          unsigned char       bInterfaceClass;      //Код класса интерфейса
          unsigned char       bInterfaceSubClass;   //Код подкласса интерфейса
          unsigned char       bInterfaceProtocol;   //Код протокола
          unsigned char       iInterface;           //Индекс дескриптора строки
          } USB_INTERFACE_DESCRIPTOR;
     } CONFIGURATION = {{0x09, 0x02, 0x0012, 0x01, 0x00, 0x00, 0x80, 0xFA},{0x09, 0x04, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00}};

компилятор между вложенными структурами вставляет никому не нужные нули... в результате хост меня шлет куда подальше...
когда без вложенных структур
Код
//---структура конфигурации-----------------------------------------------------
const struct
     {
          unsigned char       bLength;              //длина дескриптора
          unsigned char       bDescriptorType;      //тип дескриптора
          unsigned short int  wTotalLength;         //общий обьем данных, возвращаемых для данной конфигурации
          unsigned char       bNumInterfaces;       //кол-во интерфейсов поддерживаемых данной конфигурацией
          unsigned char       bConfigirationValue;  //идентификатор конфигурации
          unsigned char       iConfiguration;       //индекс дескриптора стороки
          unsigned char       bmAttributes;         //характеристики конфигурации
          unsigned char       MaxPower;             //код мощности, потребляемый устройством
          unsigned char       bLength1;              //Длина дескриптора
          unsigned char       bDescriptorType1;      //Тип дескриптора
          unsigned char       bInterfaceNumber;     //Номер данного интерфейса
          unsigned char       bAlternateSetting;    //Альтернативный номер интерфейса
          unsigned char       bNumEndpoints;        //Число конечных точек для интерфейса без 0
          unsigned char       bInterfaceClass;      //Код класса интерфейса
          unsigned char       bInterfaceSubClass;   //Код подкласса интерфейса
          unsigned char       bInterfaceProtocol;   //Код протокола
          unsigned char       iInterface;           //Индекс дескриптора строки
     } CONFIGURATION = {0x09, 0x02, 0x0012, 0x01, 0x00, 0x00, 0x80, 0xFA, 0x09, 0x04, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00};

на компе всплывает сообщение мол обнаружено USB Device чего собственно я и добивался biggrin.gif
кто может посоветовать как разрешить данную ситуацию более рационально?
aaarrr
Цитата(shrek @ Jul 20 2009, 17:56) *
компилятор между вложенными структурами вставляет никому не нужные нули...

Никому не нужные - это серьезное заявление smile.gif

Цитата(shrek @ Jul 20 2009, 17:56) *
кто может посоветовать как разрешить данную ситуацию более рационально?

Изучить документацию на компилятор и задействовать упаковку структур - #pragma pack, __packed struct и т.п. в зависимости от типа компилятора.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.