簡體   English   中英

無法解決 STM32CubeIDE 中的 C 警告

[英]Can't resolve C warning in STM32CubeIDE

面對一個我無法擺脫的警告。 我正在使用帶有標准 C11 編譯器的 stm32 MCU 和 STM32CubeIDE。 function 調用 gpio.c 文件中使用數組 gpioOutPins。 包含此 function 調用的此 function 是從 inOut.c 文件中調用的。 請注意,inOut.c 文件位於用戶應用層,而 gpio.c 文件位於項目樹的 Kernel(核心)部分,如下所示。 我無法在快照中容納整個項目樹。

我不明白為什么會生成此警告。 任何幫助表示贊賞。 謝謝你。

在 header 文件 gpio.h 中定義了一個數組:

static uint16_t gpioOutPins[GPIO_OUT_CH_NR] =
{
    DOUT_OD_OUT4_Pin, 
    DOUT_OD_OUT6_Pin, 
    DOUT_OD_OUT5_Pin, 
    DOUT_OD_OUT7_Pin, 
    DOUT_LED_DISABLE_Pin, 
    DOUT_BUZZ_Pin, 
    DOUT_OD_OUT8_Pin, 
    DOUT_OD_OUT3_Pin, 
    DOUT_OD_OUT2_Pin, 
    DOUT_OD_OUT1_Pin, 
    DOUT_ALARM_Pin, 
    DOUT_12V_PWR_Pin, 
    DOUT_12V_PWR_Pin
};

目錄結構如下所示:

在此處輸入圖像描述

編譯器生成的警告是這樣的:

warning: 'gpioOutPins' defined but not used [-Wunused-variable]

Header (.h) 文件不是定義全局變量的好地方,因為當它們包含在源 (.c) 文件中時,它們的多個獨立副本就會存在。 它們具有相同的名稱,但實際上是不同的變量。 如果它們不是static ,則 linker 會因為多個定義而拒絕它們。

您的inOutTask.c可能直接或間接包含gpio.h header,因此存在gpioOutPins的另一個副本,它與gpio.c中使用的副本不同。 因為您沒有在inOutTask.c中使用gpioOutPins ,所以您會收到警告。

正確的方法是將定義移動到gpio.c中,刪除static關鍵字,並添加extern uint16_t gpioOutPins[GPIO_OUT_CH_NR]; gpio.h

暫無
暫無

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

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