This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Problem with size of structers

Hi anybody

I declare the folowing stuctures:

typedef struct {
    ubyte	bLength;
    ubyte	bDescriptorType;
    ubyte	bInterfaceNumber;
    ubyte	bAlternateSetting;
    ubyte	bNumEndpoints;
    ubyte	bInterfaceClass;
    ubyte	bInterfaceSubClass;
    ubyte	bInterfaceProtocol;
    ubyte	iInterface;
} USB_interface_desc_t;

typedef struct {
    ubyte	bLength;
    ubyte	bDescriptorType;
    uword	wTotalLength;
    ubyte	bNumInterfaces;
    ubyte	bConfigurationValue;
    ubyte	iConfiguration;
    ubyte	bmAttributes;
    ubyte	MaxPower;
} USB_config_desc_t;


typedef struct {
    ubyte	bLength;
    ubyte	bDescriptorType;
    struct {
	ubyte address:4;
	ubyte reserved:3;
	ubyte direction:1;
    } bEndpointAddress;
    ubyte	bmAttributes;
    uword	wMaxPacketSize;
    ubyte	bInterval;
} USB_endpoint_desc_t;

typedef struct {
    USB_config_desc_t	usb_dev_config_desc;
    USB_interface_desc_t	usb_interface_0_alt_0_desc;
    USB_endpoint_desc_t	usb_dev_endpoint_alt_0_desc[2];
} USB_long_config_desc_t;

When I use the sizeof I obtain folowing values:

sizeof(USB_long_config_desc_t) = 0x24
sizeof(USB_endpoint_desc_t) = 0x08
sizeof(USB_interface_desc_t) = 0x09
sizeof(USB_config_desc_t) = 0x0A


What happens and what is wrong?

Thanks

Aram

Parents
  • " I am trying to establish communication with PC (Windows 98)"

    Welcome to the world of cross-platform interworking!

    If you're going to try to use 'C' structures to map language types onto the communications frame/packet format, you are going to have to study the manuals for both platforms very carefully - playing particular attention to data sizes, endianness, packing, alignments, and all the other implementation-specific details.

    Don't forget that Win98 runs on 32-bit Intel x86 architecture, and there is no guarantee that the data representation will match Keil's implementation on the 16-bit(?) C16x/ST10 - in fact, it's more likely that they won't match! :-(

Reply
  • " I am trying to establish communication with PC (Windows 98)"

    Welcome to the world of cross-platform interworking!

    If you're going to try to use 'C' structures to map language types onto the communications frame/packet format, you are going to have to study the manuals for both platforms very carefully - playing particular attention to data sizes, endianness, packing, alignments, and all the other implementation-specific details.

    Don't forget that Win98 runs on 32-bit Intel x86 architecture, and there is no guarantee that the data representation will match Keil's implementation on the 16-bit(?) C16x/ST10 - in fact, it's more likely that they won't match! :-(

Children