簡體   English   中英

無法解決 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
};

要調用的function是這樣定義的:

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

實際的 function 調用如下所示:

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 塊不是常量(否則你不能寫入它們),只有指向它們的指針是常量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM