无法解决与STM32CubeIDE中指针数组相关的C警告
Can't resolve C warning related to pointer array in STM32CubeIDE
面临一个我们无法摆脱的警告。我正在使用带有标准 C11 编译器的 stm32 MCU 和 STM32CubeIDE。
我想我能理解为什么编译器会发出警告,但问题是我无法解决。
任何帮助表示赞赏。谢谢。
指针数组是这样定义的
static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =
{
DOUT_OD_OUT4_GPIO_Port,
DOUT_OD_OUT6_GPIO_Port,
DOUT_OD_OUT5_GPIO_Port,
DOUT_OD_OUT7_GPIO_Port,
DOUT_LED_DISABLE_GPIO_Port,
DOUT_BUZZ_GPIO_Port,
DOUT_OD_OUT8_GPIO_Port,
DOUT_OD_OUT3_GPIO_Port,
DOUT_OD_OUT2_GPIO_Port,
DOUT_OD_OUT1_GPIO_Port,
DOUT_ALARM_GPIO_Port,
DOUT_12V_PWR_GPIO_Port,
DOUT_12V_PWR_GPIO_Port
};
要调用的函数是这样定义的:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
assert_param(IS_GPIO_PIN_ACTION(PinState));
if(PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
}
}
实际的函数调用是这样的:
if (gpioOutPolarity[channel])
{
HAL_GPIO_WritePin(gpioOutPortss[channel], gpioOutPins[channel],
GPIO_PIN_SET);
}
编译器生成的警告是这样的:
warning: passing argument 1 of 'HAL_GPIO_WritePin' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
你需要写:
static GPIO_TypeDef * const gpioOutPortss[GPIO_OUT_CH_NR] =
没有
static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =
GPIO 块不是常量(否则你不能写入它们),只有指向它们的指针是常量。
面临一个我们无法摆脱的警告。我正在使用带有标准 C11 编译器的 stm32 MCU 和 STM32CubeIDE。 我想我能理解为什么编译器会发出警告,但问题是我无法解决。 任何帮助表示赞赏。谢谢。
指针数组是这样定义的
static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =
{
DOUT_OD_OUT4_GPIO_Port,
DOUT_OD_OUT6_GPIO_Port,
DOUT_OD_OUT5_GPIO_Port,
DOUT_OD_OUT7_GPIO_Port,
DOUT_LED_DISABLE_GPIO_Port,
DOUT_BUZZ_GPIO_Port,
DOUT_OD_OUT8_GPIO_Port,
DOUT_OD_OUT3_GPIO_Port,
DOUT_OD_OUT2_GPIO_Port,
DOUT_OD_OUT1_GPIO_Port,
DOUT_ALARM_GPIO_Port,
DOUT_12V_PWR_GPIO_Port,
DOUT_12V_PWR_GPIO_Port
};
要调用的函数是这样定义的:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
assert_param(IS_GPIO_PIN_ACTION(PinState));
if(PinState != GPIO_PIN_RESET)
{
GPIOx->BSRR = GPIO_Pin;
}
else
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
}
}
实际的函数调用是这样的:
if (gpioOutPolarity[channel])
{
HAL_GPIO_WritePin(gpioOutPortss[channel], gpioOutPins[channel],
GPIO_PIN_SET);
}
编译器生成的警告是这样的:
warning: passing argument 1 of 'HAL_GPIO_WritePin' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
你需要写:
static GPIO_TypeDef * const gpioOutPortss[GPIO_OUT_CH_NR] =
没有
static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =
GPIO 块不是常量(否则你不能写入它们),只有指向它们的指针是常量。