mac vscode的esp-idf案例helloworld环境部署问题

macos 13.2.1
vscode Version: 1.79.2 (Universal)
esp-idf v5.1.0

你好,我是mac电脑安装了vscode和esp-idf。为什么显示identifier "CONFIG_IDF_TARGET" is undefined和identifier "CONFIG_FREERTOS_HZ" is undefined,是不是哪里没有配置好。


[{
    "resource": "/Users/lomon/esp/example/hello_world/hello_world/main/hello_world_main.c",
    "owner": "C/C++: IntelliSense",
    "code": "20",
    "severity": 8,
    "message": "identifier \"CONFIG_IDF_TARGET\" is undefined",
    "source": "C/C++",
    "startLineNumber": 25,
    "startColumn": 12,
    "endLineNumber": 25,
    "endColumn": 29
},{
    "resource": "/Users/lomon/esp/example/hello_world/hello_world/main/hello_world_main.c",
    "owner": "C/C++: IntelliSense",
    "code": "20",
    "severity": 8,
    "message": "identifier \"CONFIG_FREERTOS_HZ\" is undefined",
    "source": "C/C++",
    "startLineNumber": 46,
    "startColumn": 27,
    "endLineNumber": 46,
    "endColumn": 45
}]


以下是代码

/*
 * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */

#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "freertos/FreeRTOSConfig.h"

void app_main(void)
{
    printf("Hello world!\n");

    /* Print chip information */
    esp_chip_info_t chip_info;
    uint32_t flash_size;
    esp_chip_info(&chip_info);
    printf("This is %s chip with %d CPU core(s), WiFi%s%s%s, ",
           CONFIG_IDF_TARGET,
           chip_info.cores,
           (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
           (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "",
           (chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");

    unsigned major_rev = chip_info.revision / 100;
    unsigned minor_rev = chip_info.revision % 100;
    printf("silicon revision v%d.%d, ", major_rev, minor_rev);
    if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
        printf("Get flash size failed");
        return;
    }

    printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
           (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

    printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());

    for (int i = 10; i >= 0; i--) {
        printf("Restarting in %d seconds...\n", i);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
    printf("Restarting now.\n");
    fflush(stdout);
    esp_restart();
}


先检查两个缺失文件的宏定义,看看esp-idf开发环境有没有配置好,用命令检查下:

idf.py --version


缺少正确的配置文件?

你把你用的教程发给我。

很明显环境没有配置好,否则即使不配置这几个参数,也会有缺省值。
不知道你用的哪种方式搭建环境,个人建议新手用VSCode的IDF插件一键配置环境

CONFIG_IDF_TARGET 和 CONFIG_FREERTOS_HZ 都是 ESP-IDF 中的配置宏,需要在工程的 文件中进行配置

这些错误提示表明在你的代码中,没有正确地定义和配置"CONFIG_IDF_TARGET""CONFIG_FREERTOS_HZ"这两个标识符。
这是由于你的ESP-IDF项目可能缺少必要的配置或者没有正确引入所需的头文件
建议:
1、检查你的代码文件是否包含了正确的头文件
在你的代码文件的开头添加以下语句:
#include "FreeRTOS.h"  
#include "freertos/iot_std_api.h"

"CONFIG_IDF_TARGET" is undefined和identifier,此类问题都是编译器使用之前qt的配置造成的,点击左下角esp32位置,屏幕中上方会选择工程平台硬件等信息,确认之后,c_cpp_properties.json会自动调整。如果没有自动调整,找到c_cpp_properties.json文件,在includePath中配置,esp的路径:


"includePath": [
                "${workspaceFolder}/**",
                "D:\\exe\\esp32\\esp-idf/**",
                "D:\\exe\\esp32tools/**"
            ]

开发环境没有配置好

巨详细一站式VScode+ESP-IDF开发环境搭建教程,附带Python和Git安装教程、安装出错踩坑经验

可以参考下、

Visual Studio Code搭建 ESP-IDF ESP32开发环境配置第一程序hello_world
1. 自己的esp-idf安装目录里把: -----\esp-idf\examples\get-started里的hello_world 复制出来放到哪自己定。
2. 自己的esp-idf安装目录里把:-----\esp-idf\tools里的idf.py复制出来放到刚复制出来的hello_world 文档下如D:\ESP\hello_world
3. 打开cmd 命令 如DD: `进入D盘再cd %userprofile%\esp\hello_world %userprofile%是你的刚才hello_world的地址如:D:>cd D:\ESP\hello_world 进入D:\ESP\hello_world>安装idf.py set-target esp32与安装idf.py menuconfig


配置文件没有弄好导致的

这个问题通常是由于没有正确配置ESP-IDF环境变量导致的。请按照以下步骤检查和配置ESP-IDF环境变量:

  1. 打开终端,并执行以下命令来打开.bash_profile文件:

    nano ~/.bash_profile
    
  2. 检查文件中是否已经配置了IDF_PATHPATH环境变量。如果没有,请添加以下行(假设ESP-IDF安装在~/esp/esp-idf目录下):

    export IDF_PATH=~/esp/esp-idf
    export PATH=$PATH:$IDF_PATH/tools
    
  3. Ctrl + X 保存并关闭.bash_profile文件,然后运行以下命令来使环境变量生效:

    source ~/.bash_profile
    
  4. 确保你已经正确设置了ESP-IDF环境变量。在终端中输入以下命令来验证:

    echo $IDF_PATH
    

    如果输出显示了正确的ESP-IDF路径,则说明环境变量已经正确设置。

  5. 在VS Code中重新打开ESP-IDF工程,并尝试重新编译和运行。


根据你提供的信息,显示"identifier 'CONFIG_IDF_TARGET' is undefined""identifier 'CONFIG_FREERTOS_HZ' is undefined"的错误提示,可能是因为你的配置文件中缺少了相应的定义。 
 首先,请确保你已经正确安装了esp-idf,并且在VSCode中配置了esp-idf的路径。接下来,你需要检查以下几个方面: 
 1. 确认你的工程目录中是否存在一个名为 sdkconfig 的文件。这个文件是esp-idf的配置文件,其中包含了各种编译选项的定义。 
 2. 打开 sdkconfig 文件,查找是否存在 CONFIG_IDF_TARGET 和 CONFIG_FREERTOS_HZ 这两个选项的定义。如果没有,你可以手动添加它们到 sdkconfig 文件中。 
    例如,可以在 sdkconfig 文件中添加如下定义:
CONFIG_IDF_TARGET="esp32"
   CONFIG_FREERTOS_HZ=1000


注意, CONFIG_IDF_TARGET 的值应该根据你的目标设备进行设置,例如 esp32 或 esp8266 等。而 CONFIG_FREERTOS_HZ 是FreeRTOS操作系统的时钟频率,可以根据你的需求进行设置。 
 3. 确保你的工程目录中存在一个名为 CMakeLists.txt 的文件,该文件是CMake构建系统的配置文件。在这个文件中,你需要添加以下内容来引用 sdkconfig 文件中的配置选项:
cmake
   include($ENV{IDF_PATH}/tools/cmake/project.cmake)
   project(your_project_name)
    # 加入以下两行
   include($ENV{IDF_PATH}/tools/cmake/idf.cmake)
   idf_build_set_property(IDF_BUILD_FLAGS "-DCONFIG_IDF_TARGET=\"${CONFIG_IDF_TARGET}\" -DCONFIG_FREERTOS_HZ=${CONFIG_FREERTOS_HZ}")

这样,CMake构建系统就会将 CONFIG_IDF_TARGET 和 CONFIG_FREERTOS_HZ 的值传递给编译器。 
 完成上述步骤后,重新编译你的项目,看看是否还会出现"identifier 'CONFIG_IDF_TARGET' is undefined""identifier 'CONFIG_FREERTOS_HZ' is undefined"的错误提示。如果问题仍然存在,请确保你的配置文件和CMakeLists.txt文件中的定义正确无误,并且路径配置也正确。