Компилятор RealView 4.0.0.524 из пакета MDK3.70. C++.
Что-то не слушается меня компилер, то ли я не так пишу, то ли багу нашёл.
Исходник:
Код
#define USB_STRING_DESCRIPTOR_TYPE 3
#define MANUF_STRING L"Sonycman Production"
#define PROD_STRING L"Sonycman Mass Storage Drive"
#define SERIAL_STRING L"123456789ABC"
typedef __packed struct
{
byte length;
byte descriptor_type;
word languageID;
} USB_STRING_ID_DESCRIPTOR;
typedef __packed struct
{
byte length;
byte descriptor_type;
wchar_t text[sizeof(MANUF_STRING)/2];
} USB_STRING1_DESCRIPTOR;
typedef __packed struct
{
byte length;
byte descriptor_type;
wchar_t text[sizeof(PROD_STRING)/2];
} USB_STRING2_DESCRIPTOR;
typedef __packed struct
{
byte length;
byte descriptor_type;
wchar_t text[sizeof(SERIAL_STRING)/2];
} USB_STRING3_DESCRIPTOR;
typedef __packed struct
{
USB_STRING_ID_DESCRIPTOR s0;
USB_STRING1_DESCRIPTOR s1;
USB_STRING2_DESCRIPTOR s2;
USB_STRING3_DESCRIPTOR s3;
} USB_STRING_DESCRIPTOR;
и инициализация:
Код
const USB_STRING_DESCRIPTOR CUSB::strings = {
sizeof(USB_STRING_ID_DESCRIPTOR),
USB_STRING_DESCRIPTOR_TYPE,
0x409, //language ID
sizeof(USB_STRING1_DESCRIPTOR),
USB_STRING_DESCRIPTOR_TYPE,
MANUF_STRING,
sizeof(USB_STRING2_DESCRIPTOR),
USB_STRING_DESCRIPTOR_TYPE,
PROD_STRING,
sizeof(USB_STRING3_DESCRIPTOR),
USB_STRING_DESCRIPTOR_TYPE,
SERIAL_STRING
};
Так вот, члену strings присваиваются такие данные:
0x080046f9: 04 03 09 04 2a 03
00 53 00 6f 00 6e 00...
Но откуда взялся в запакованной структуре явно пэддинг байт (выделен жирным)?!