【问题标题】:C compiler issue, multiple path definitions/linksC 编译器问题,多个路径定义/链接
【发布时间】:2016-03-28 06:57:27
【问题描述】:

我正在使用 NXP LPCopen C 库。我正在使用 Eclipse Mars 和 MinGW/gcc。我在 Eclipse 中遇到了一个特定 typedef 产生错误的问题:

“'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);
}

我不确定要解决什么问题。如果有帮助,我很乐意发布任何相关文件。

【问题讨论】:

  • 使用-E 标志构建您的源文件以获得预处理输出。然后检查输出以查看确切的定义。
  • 另外,编译器不会告诉你冲突类型在哪里吗?它应该有类似<file_name>:<X>:<Y>: note: previous declaration of 'LPC_GPIO_T' was here 的消息
  • 你有误会。您的观点2 只是定义了另一个 typedef,而不是声明该结构的任何实际实例
  • 3点,参数LPC_GPIO_T *pGPIO被传递,调用者必须有一个结构的实例,比如:LPC_GPIO_T *ptr;然后一些代码填充该结构的字段, 然后Chip_GPIO_WritePortBit( ptr, .... ); 'ptr' 是调用代码中声明的变量

标签: c eclipse gcc mingw


【解决方案1】:

编译器的输出并没有直接告诉我冲突在哪里。环顾所有文件,我发现了我的冲突。当我认为没有冲突时,我发布了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多