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

C51: Word Alignment in Keil C51

How I can turn-on word alignment in Keil C51?
I have such definition of USB-descriptors for Cypress EZ-USB chip CY7C68013:

const DEVICEDSCR code TestSyncSlave_DeviceDescriptor =
{   // Device descriptor
    sizeof(DEVICEDSCR),             // 0x00 Length of this descriptor
    DEVICE_DSCR,                    // 0x01 Descriptor type
    USBSPEC,                        // 0x02 USB Specification Release Number
    VENDOR_SPECIFIC,                // 0x04 Class Code
    0x00,                           // 0x05 Sub Class Code
    0x00,                           // 0x06 Protocol
    EP0_MAX_PACKET_SIZE,            // 0x07 Maximum Endpoint 0 Packet Size
    VID_EPOS,                       // 0x08 Vendor ID
    PID_ANALYSER,                   // 0x0a Product ID
    DID_ANALYSER,                   // 0x0c DeviceBCD Device Release Number
    STRING_INDEX_MANUFACTURER,      // 0x0e Index of string descriptor describing manufacturer
    STRING_INDEX_PRODUCT,           // 0x0f Index of string descriptor describing product
    0x00,                           // 0x10 Index of string descriptor describing serial number
    0x01                            // 0x11 Number of configurations
};

///////////////////////////////////////////////////////////////////////////////
const DEVICEQUALDSCR code TestSyncSlave_DeviceQualifierDescriptor =
{   // Device Qualifier descriptor
    sizeof(DEVICEQUALDSCR),         // 0x00 Length of this descriptor
    DEVQUAL_DSCR,                   // 0x01 Descriptor type
    USBSPEC,                        // 0x02 USB Specification Release Number
    VENDOR_SPECIFIC,                // 0x04 Class Code
    0x00,                           // 0x05 Sub Class Code
    0x00,                           // 0x06 Protocol
    EP0_MAX_PACKET_SIZE,            // 0x07 Maximum Endpoint 0 Packet Size
    0x01,                           // 0x08 Number of configurations
    0x00                            // 0x09 Reserve
};

///////////////////////////////////////////////////////////////////////////////
const DEVICECONFG code TestSyncSlave_HS_Config  =
{   // Configuration when connected to a High Speed host
    {   // Configuration Descriptor
        sizeof(CONFIGDSCR),     // 0x00 bLength: Length of this descriptor
        CONFIG_DSCR,            // 0x01 Type (CONFIGURATION_DESC or CONFIGURATION_DESC)
        LSB(sizeof(DEVICECONFG)),   // 0x02 wTotalLength: Total length for this configuration
        MSB(sizeof(DEVICECONFG)),   // 0x02 wTotalLength: Total length for this configuration
        NUM_INTERFACES,         // 0x04 bNumInterfaces: Number of Interfaces
        0x01,                   // 0x05 bConfigurationValue: Number of this configuration
        0x00,                   // 0x06 iConfiguration: Index of string descriptor describing this configuration
        CONFIG_ATTRIBUTES,      // 0x07 bmAttributes: 7:AlwaysSet|6:SelfPowered|5:RemoteWakeup
        150                     // 0x08 bMaxPower: Max USB power (in 2mA units)
    },

    {   // Interface Descriptor:
        sizeof(INTRFCDSCR),     // 0x00 Size of this descriptor
        INTRFC_DSCR,            // 0x01 Type
        0x00,                   // 0x02 Number of this interface
        0x00,                   // 0x03 Alternate interface
        ENDPOINT_COUNT, // 0x04 Number of endpoints in this interface (without EP0)
        VENDOR_SPECIFIC,        // 0x05 Class Code
        0x00,                   // 0x06 Sub Class Code
        0x00,                   // 0x07 Device Protocol
        0x00,                   // 0x08 Index of string descriptor describing this interface
    },

    {
        // Endpoint Descriptors:      Type     Dir     MaxPkt  UsbEp   Poll
        {MAKE_ENDPOINT_DESCRIPTOR( EP_BULK, EP_IN,  512, 0x86,   0   )},
        {MAKE_ENDPOINT_DESCRIPTOR( EP_BULK, EP_OUT, 64,  0x01,   0   )},
        {MAKE_ENDPOINT_DESCRIPTOR( EP_BULK, EP_IN,  64,  0x81,   0   )}

    }

};
//In such definition last structure is missalignment, so I must align it...
///////////////////////////////////////////////////////////////////////////////
const DEVICECONFG code TestSyncSlave_FS_Config =
{   // Configuration when connected to a Full Speed host
    {   // Configuration descriptor
        sizeof(CONFIGDSCR),     // 0x00 Length of this descriptor
        CONFIG_DSCR,            // 0x01 Type (CONFIGURATION_DESC or OTHER_SPEED_CONFIGURATION_DESC)
        LSB(sizeof(DEVICECONFG)),   // 0x02 wTotalLength: Total length for this configuration
        MSB(sizeof(DEVICECONFG)),   // 0x02 wTotalLength: Total length for this configuration
        NUM_INTERFACES,         // 0x04 Number of Interfaces
        0x01,                   // 0x05 Number of this configuration
        0x00,                   // 0x06 Index of string descriptor describing this configuration
        CONFIG_ATTRIBUTES,      // 0x07 bmAttributes: 7:AlwaysSet|6:SelfPowered|5:RemoteWakeup
        150                     // 0x08 Max USB power (in 2mA units)
    },

    {   // Interface Descriptor:
        sizeof(INTRFCDSCR),     // 0x00 Size of this descriptor
        INTRFC_DSCR,            // 0x01 Type
        0x00,                   // 0x02 Number of this interface
        0x00,                   // 0x03 Alternate interface
        ENDPOINT_COUNT,         // 0x04 Number of endpoints in this interface (without EP0)
        VENDOR_SPECIFIC,        // 0x05 Class Code
        0x00,                   // 0x06 Sub Class Code
        0x00,                   // 0x07 Device Protocol
        0x00,                   // 0x08 Index of string descriptor describing this interface
    },
    {
        // Endpoint Descriptors:      Type     Dir     MaxPkt  UsbEp   Poll
        {MAKE_ENDPOINT_DESCRIPTOR( EP_BULK, EP_IN,  64,  0x86,   0   )},
        {MAKE_ENDPOINT_DESCRIPTOR( EP_BULK, EP_OUT, 64,  0x01,   0   )},
        {MAKE_ENDPOINT_DESCRIPTOR( EP_BULK, EP_IN,  64,  0x81,   0   )}
        }


};

EZ-USB needs that each USB-descriptor was word alignment.
How can I do this in Keil C51(any directive such as #pragma pack)?

Parents
  • I also try this, i define char variables bethween structures.
    But this method uncomfortabe, because we may want to change descriptor, so changed length of HighSpeedConfigDscr,FullSpeedConfigDscr. In this case may appear situation that structures were alignment, but char variabes insert missalignment )))

Reply
  • I also try this, i define char variables bethween structures.
    But this method uncomfortabe, because we may want to change descriptor, so changed length of HighSpeedConfigDscr,FullSpeedConfigDscr. In this case may appear situation that structures were alignment, but char variabes insert missalignment )))

Children
No data