I am using struct in my code. with LPC1317.
Now if I write:
typedef struct { uint32_t f; union { uint32_t ADR[3]; struct { uint32_t ADR1; uint32_t ADR2; uint32_t ADR3; }; // warning : #40-D expected an identifier }; // warning : #40-D expected an identifier } j;
It generated a warninga s mentioned above. I know it can be solved my naming them.
But in header file of LPC13Uxx.h, this has been done & it don't generate warning.& elements can be accessed also. Below is how its is done in lPc13uxx.h
typedef struct { /*!< (@ 0x50000000) GPIO_PORT Structure */ union { struct { __IO uint8_t B0[32]; /*!< (@ 0x50000000) Byte pin registers port 0; pins PIO0_0 to PIO0_31 */ __IO uint8_t B1[32]; /*!< (@ 0x50000020) Byte pin registers port 1 */ }; __IO uint8_t B[64]; /*!< (@ 0x50000000) Byte pin registers port 0/1 */ }; __I uint32_t RESERVED0[1008]; union { struct { __IO uint32_t W0[32]; /*!< (@ 0x50001000) Word pin registers port 0 */ __IO uint32_t W1[32]; /*!< (@ 0x50001080) Word pin registers port 1 */ }; __IO uint32_t W[64]; /*!< (@ 0x50001000) Word pin registers port 0/1 */ }; __I uint32_t RESERVED1[960]; __IO uint32_t DIR[2]; /*!< (@ 0x50002000) Direction registers port 0/1 */ __I uint32_t RESERVED2[30]; __IO uint32_t MASK[2]; /*!< (@ 0x50002080) Mask register port 0/1 */ __I uint32_t RESERVED3[30]; __IO uint32_t PIN[2]; /*!< (@ 0x50002100) Portpin register port 0 */ __I uint32_t RESERVED4[30]; __IO uint32_t MPIN[2]; /*!< (@ 0x50002180) Masked port register port 0/1 */ __I uint32_t RESERVED5[30]; __IO uint32_t SET[2]; /*!< (@ 0x50002200) Write: Set register for port 0/1 Read: output bits for port 0/1 */ __I uint32_t RESERVED6[30]; __O uint32_t CLR[2]; /*!< (@ 0x50002280) Clear port 0/1 */ __I uint32_t RESERVED7[30]; __O uint32_t NOT[2]; /*!< (@ 0x50002300) Toggle port 0/1 */ } LPC_GPIO_Type;
Anonymous (unamed) unions and structs are not standard 'C' but are extensions (although they are in the new C11 standard). Perhaps the reason there is no warning in the header file is that it has a #pragma which turns off the warning?
Yes its pragma:
#pragma anon_unions