首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MPLAB 8导入项目后MPLAB X IDE重定义错误

MPLAB 8导入项目后MPLAB X IDE重定义错误
EN

Stack Overflow用户
提问于 2022-11-28 17:28:05
回答 1查看 38关注 0票数 0

由于类型、枚举和pic头文件而导致的重新定义错误。在两个不同的头文件中将AN1定义为AN12 --不会生成

大家好,

我有一个MPLAB 8项目,我已经导入到MPLAB。我已经设法更改了一些C标准设置,以便将其简化为一个重复的错误,即:

..//kADC.h:31:5::重新定义' AN1‘C:/Program __bit AN1 __at(0x7C01);// @(0xF 80*8+ 1)

我认为,这是因为在PICS头文件中重新定义了AN以及它们。

单位: kADC.h

代码语言:javascript
运行
复制
typedef enum ADC_CHANNEL_ENUM
{
    AN0 = 1,
    AN1,
    AN2,
    AN3,
    AN4,
    AN8,
    AN9,
    AN10,
    AN11,
    AN12,
    NO_READING
} ADCChannelEnum;

在pic18f2321.h

代码语言:javascript
运行
复制
extern volatile __bit                   AN0                 __at(0x7C00);   // @ (0xF80 * 8 + 0)
#define                                 AN0_bit             BANKMASK(PORTA), 0
// PORTA<AN1>
extern volatile __bit                   AN1                 __at(0x7C01);   // @ (0xF80 * 8 + 1)
#define                                 AN1_bit             BANKMASK(PORTA), 1
// PORTB<AN10>
extern volatile __bit                   AN10                __at(0x7C09);   // @ (0xF81 * 8 + 1)
#define                                 AN10_bit            BANKMASK(PORTB), 1
// PORTB<AN11>
extern volatile __bit                   AN11                __at(0x7C0C);   // @ (0xF81 * 8 + 4)
#define                                 AN11_bit            BANKMASK(PORTB), 4
// PORTB<AN12>
extern volatile __bit                   AN12                __at(0x7C08);   // @ (0xF81 * 8 + 0)
#define                                 AN12_bit            BANKMASK(PORTB), 0
// PORTA<AN2>
extern volatile __bit                   AN2                 __at(0x7C02);   // @ (0xF80 * 8 + 2)
#define                                 AN2_bit             BANKMASK(PORTA), 2

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 11:56:47

如果您不必在kADC.c文件之外使用ADC_CHANNEL_ENUM,请将枚举定义移动到kADC.c文件中,以便枚举定义变为私有。这样可以防止重新定义错误。

但是,如果必须在kADC.c文件之外使用ADC_CHANNEL_ENUM,则必须更改名称,即;而不是AN0,使用ANLG0

另一种防止这种情况的方法,并不是一种更好的方法,它意味着不包括xc或pic18f2321头。这使得您的项目无法使用所有方便的硬件特定定义,从而给您带来更大的不便。

据我所见,您没有在主文件中使用任何ADC_CHANNEL_ENUM,但我不知道您的项目中是否有更多的文件并在其中使用该枚举(您可以指定是否有)。然后,您可以考虑将enum定义改为kADC.c文件。

继续尝试上面的选项之一,看看哪一个最适合你的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74604353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档