Tworzę unię, w której umieszczam strukturę oraz tablicę jednowymiarową, która ma mi umożliwić łatwy dostęp do unii podczas kopiowania jej do endpointa 0 (USB)
Kod: Zaznacz cały
typedef union
{
struct
{
uint8_t bLength;
uint8_t bDescriptorType;
uint8_t bcdUSBL;
uint8_t bcdUSBH;
uint8_t bDeviceClass;
uint8_t bDeviceSubClass;
uint8_t bDeviceProtocol;
uint8_t bMaxPacketSize;
uint8_t idVendorL;
uint8_t idVendorH;
uint8_t idProductL;
uint8_t idProductH;
uint8_t bcdDeviceL;
uint8_t bcdDeviceH;
uint8_t iManufacturer;
uint8_t iProduct;
uint8_t iSerialNumber;
uint8_t bNumConfigurations;
};
uint8_t DescBuffer[18];
}DeviceDescriptorType;
Oprócz tego typu złożonego posiadam zestaw makr, którymi chcę zainicjalizować zmienną const.
Kod: Zaznacz cały
//device descriptor macros
#define USB_DEV_DESCRIPTOR_TYPE 0x01 //device
#define USB_DEV_BCDUSB_L 0x00 //USB 2.0
#define USB_DEV_BCDUSB_H 0x20
#define USB_DEV_CLASS 0xFF //vendor defined?
#define USB_DEV_SUBCLASS 0x00
#define USB_DEV_PROTOCOL 0x00
#define USB_DEV_PACKET_SIZE 0x40
#define USB_DEV_VENDOR_ID_L 0xC1 //VID 0x17C1
#define USB_DEV_VENDOR_ID_H 0x17
#define USB_DEV_DEVICE_ID_L 0xFF //PID 0x06FF
#define USB_DEV_DEVICE_ID_H 0x06
#define USB_DEV_BCDDEVICE_L 0x00
#define USB_DEV_BCDDEVICE_H 0x01
#define USB_DEV_MANUFACTURER 0x00
#define USB_DEV_PRODUCT 0x00
#define USB_DEV_SER_NUMBER 0x00
#define USB_DEV_NUM_CONFIG 0x01
Następnie deklaruję zmienną typu DeviceDescriptorType i od razu chcę ją zainicjalizować:
Kod: Zaznacz cały
const DeviceDescriptorType devDesc[18] = //active device descriptor
{
18, //sizeof(DeviceDescriptorType)
USB_DEV_DESCRIPTOR_TYPE,
USB_DEV_BCDUSB_L,
USB_DEV_BCDUSB_H,
USB_DEV_CLASS,
USB_DEV_SUBCLASS,
USB_DEV_PROTOCOL,
USB_DEV_PACKET_SIZE,
USB_DEV_VENDOR_ID_L,
USB_DEV_VENDOR_ID_H,
USB_DEV_DEVICE_ID_L,
USB_DEV_DEVICE_ID_H,
USB_DEV_BCDDEVICE_L,
USB_DEV_BCDDEVICE_H,
USB_DEV_MANUFACTURER,
USB_DEV_PRODUCT,
USB_DEV_SER_NUMBER,
USB_DEV_NUM_CONFIG
};
Niestety kompilator wypisuje błąd:
usb_stack/usb.c:11: error: (207) simple type required for "@" <----- ten błąd jest wynikiem poniższego i to nie kłopot dla mnie
usb_stack/usb.c:11: error: (182) illegal conversion between types unsigned int -> struct S594 <--- Nie bardzo rozumiem, gdzie popełniam błąd podczas inicjalizacji.
Ostatecznie zrobiłem tablicę jednowymiarową i zainicjalizowałem ją makrami...jak sugerował PROTON, ale nie daje mi spokoju brak umiejętności użycia unii