【发布时间】: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' 是调用代码中声明的变量