由于类型、枚举和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
typedef enum ADC_CHANNEL_ENUM
{
AN0 = 1,
AN1,
AN2,
AN3,
AN4,
AN8,
AN9,
AN10,
AN11,
AN12,
NO_READING
} ADCChannelEnum;在pic18f2321.h
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任何帮助都将不胜感激。
发布于 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文件。
继续尝试上面的选项之一,看看哪一个最适合你的情况。
https://stackoverflow.com/questions/74604353
复制相似问题