无法解决与 STM32CubeIDE 中的指针数组相关的 C 警告

发布于 2025-01-09 07:33:41 字数 1307 浏览 1 评论 0原文

面临着我们无法摆脱的警告。我使用 stm32 MCU 和 STM32CubeIDE 以及标准 C11 编译器。 我想我可以理解为什么编译器会抛出警告,但问题是我无法解决。 任何帮助表示赞赏。谢谢。

指针数组是这样定义的

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]

Facing a a warning which we are not able to get rid of. I am using stm32 MCU and STM32CubeIDE with a standard C11 compiler.
I think I can understand why the compiler is throwing the warning but the problem is I am not able to resolve.
Any help is appreciated. Thank you.

The array of pointer is defined this way

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
};

The function to be called is defined this way:

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;
  }
}

The actual function call looks like this:

if (gpioOutPolarity[channel])
{
    HAL_GPIO_WritePin(gpioOutPortss[channel], gpioOutPins[channel],
    GPIO_PIN_SET);
}

The warning generated by the compiler is this:

warning: passing argument 1 of 'HAL_GPIO_WritePin' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痕至 2025-01-16 07:33:41

您需要写:

static GPIO_TypeDef * const gpioOutPortss[GPIO_OUT_CH_NR] =

not

static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =

GPIO 块不是恒定的(否则您无法写入它们),只有指向它们的指针是恒定的。

You need to write:

static GPIO_TypeDef * const gpioOutPortss[GPIO_OUT_CH_NR] =

not

static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =

The GPIO blocks are not constant (otherwise you couldn't write to them), only the pointers to them are constant.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文