2015-12-22 62 views
0

我正在使用恩智浦LPCopen C庫。我使用Eclipse Mars和MinGW/gcc。我在Eclipse中遇到一個問題,即一個特定的typedef是生產一個錯誤:C編譯器問題,多路徑定義/鏈接

"conflicting types for 'LPC_GPIO_T'"

基於我使用(並用CTRL + H搜索確認)文件,LPC_GPIO_T只被3使用地方:

1)在gpio_002.h,其中該結構被定義

typedef struct {  /* GPIO_PORT Structure */ 
    __IO uint32_t DIR;  /* Offset 0x0000: GPIO Port Direction control register */ 
    uint32_t RESERVED0[3]; 
    __IO uint32_t MASK; /* Offset 0x0010: GPIO Mask register */ 
    __IO uint32_t PIN;  /* Offset 0x0014: Pin value register using FIOMASK */ 
    __IO uint32_t SET;  /* Offset 0x0018: Output Set register using FIOMASK */ 
    __O uint32_t CLR;  /* Offset 0x001C: Output Clear register using FIOMASK */ 
} IP_GPIO_002_T; 

2)在chip_lpc175x_6x.h,其中所述的typedef正在聲明

typedef IP_GPIO_002_T LPC_GPIO_T; 

3)在gpio_17xx_40xx.h,它是一個參數的函數

STATIC INLINE void Chip_GPIO_WritePortBit(LPC_GPIO_T *pGPIO, uint32_t port, uint8_t bit, bool setting) { 

    IP_GPIO_WritePortBit((LPC_GPIO_T *) (LPC_GPIO + port), bit, setting); 
} 

我不知道這個問題是解決它到底是什麼。如果能提供幫助,我很高興發佈任何相關文件。

+0

用'-E'標誌構建源文件以獲得預處理輸出。然後檢查輸出以查看確切的定義。 – kaylum

+1

另外,編譯器不會告訴你衝突類型在哪裏?它應該有一個消息,如':注意:'LPC_GPIO_T'之前的聲明在這裏' – kaylum

+0

您有誤解。您的要點'2'只是定義了另一個typedef,而不是在點'3'中聲明結構 – user3629249

回答

0

編譯器的輸出沒有直接告訴我衝突在哪裏。環顧所有的文件,我發現我的衝突。當我認爲沒有發現衝突時,我發佈了這個問題。