gpt4 book ai didi

c - C 中的枚举类型警告

转载 作者:行者123 更新时间:2023-12-01 15:27:19 25 4
gpt4 key购买 nike

我正在 lpc1788 ARM Cortex M3 上编写代码。当我尝试将端口配置为 GPIO 时,我遇到了一个奇怪的警告。尽管有警告,代码仍然可以正常工作,但要了解为什么会出现此警告,我将在此处发布这篇文章。以下是我编写的代码。

static uint32_t * PIN_GetPointer(uint8_t portnum, uint8_t pinnum)  
{
uint32_t *pPIN = NULL;
pPIN = (uint32_t *)(LPC_IOCON_BASE + ((portnum * 32 + pinnum)*sizeof(uint32_t)));
return pPIN;
}

void PINSEL_SetPinMode ( uint8_t portnum, uint8_t pinnum, PinSel_BasicMode modenum)
{
uint32_t *pPIN = NULL;
pPIN = PIN_GetPointer(portnum, pinnum);
*(uint32_t *)pPIN &= ~(3<<3); //Clear function bits
*(uint32_t *)pPIN |= (uint32_t)(modenum<<3);
}

int main(void)
{
PINSEL_SetPinMode(1,15,0); //this gave a warning: enumerated type mixed with another type
PINSEL_SetPinMode(1,18,PINSEL_BASICMODE_NPLU_NPDN); //this doesnt give any warning

/* Following is the enum present in a GPIO related header file, putting it here in comments so that
those who are going through this post, can see the enum

typedef enum
{
PINSEL_BASICMODE_NPLU_NPDN = 0, // Neither Pull up nor pull down
PINSEL_BASICMODE_PULLDOWN, // Pull-down enabled
PINSEL_BASICMODE_PULLUP, // Pull-up enabled (default)
PINSEL_BASICMODE_REPEATER // Repeater mode
}PinSel_BasicMode;
*/

return 0;
}

最佳答案

您正在使用 int 类型,其中需要 enum PinSel_BasicMode 类型。虽然枚举和整数通常可以互换,但它们是不同的类型。

0 不是枚举值。 PINSEL_BASICMODE_NPLU_NPDN 是。根据定义,它只有 0

如果枚举声明发生变化并且 PINSEL_BASICMODE_NPLU_NPDN 等于 1,您的代码将无效。

关于c - C 中的枚举类型警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com