编译freeRTOS “error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token”错误解决

本文记录了一次ESP8266 RTOS SDK编译过程中的错误解决经历,主要错误为expected '=', ',', ';', 'asm' or '__attribute__' before '{' token。通过逐步排查,发现是由于头文件包含顺序不当引起,最终在源文件中先引入freertos/FreeRTOS.h解决了问题。文章强调了首个编译错误的重要性及正确的头文件包含顺序。

今日编译ESP8266 RTOS SDK的时候有个头文件声明了extern 结构体,结果一旦加入这个头文件编译就各种报错,提示error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

一通搜索之后并未解决我的问题,回滚编译日志发现错误太多居然超出了log的buffer大小,看不到完整的log。于是再次编译,开始报错后立刻按ctrl+c中断编译,终于发现另外一个关键错误提示信息:

ESP8266_RTOS_SDK/components/freertos/include/freertos/event_groups.h:32:3: error: #error "include FreeRTOS.h" must appear in source files before "include event_groups.h"
  #error "include FreeRTOS.h" must appear in source files before "include event_groups.h"

在这个头文件中,有一句:
#include "freertos/event_groups.h"
而包含改头文件的c文件并没有#include "freertos/FreeRTOS.h",在前面添加此头文件问题解决。

总结:
很多时候,第一个编译错误才是最关键的信息,后面的错误可能是前面的错误导致的。从上至下解决编译错误可能是最有效率的解决方法。

[1072/1082] Building CXX object esp-idf/OLED/CMakeFiles/__idf_OLED.dir/OLED.C.obj FAILED: esp-idf/OLED/CMakeFiles/__idf_OLED.dir/OLED.C.obj C:\esp32\Espressif\tools\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32s3-elf-g++.exe -DESP_PLATFORM -DIDF_VER=\"v5.5.1-dirty\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -ID:/ESP32/1/build/config -ID:/ESP32/1/components/OLED -IC:/esp32/v5.5.1/esp-idf/components/newlib/platform_include -IC:/esp32/v5.5.1/esp-idf/components/freertos/config/include -IC:/esp32/v5.5.1/esp-idf/components/freertos/config/include/freertos -IC:/esp32/v5.5.1/esp-idf/components/freertos/config/xtensa/include -IC:/esp32/v5.5.1/esp-idf/components/freertos/FreeRTOS-Kernel/include -IC:/esp32/v5.5.1/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -IC:/esp32/v5.5.1/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -IC:/esp32/v5.5.1/esp-idf/components/freertos/esp_additions/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/include/soc -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/include/soc/esp32s3 -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/dma/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/ldo/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/debug_probe/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/mspi_timing_tuning/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/power_supply/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/port/esp32s3/. -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/port/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/. -IC:/esp32/v5.5.1/esp-idf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/heap/include -IC:/esp32/v5.5.1/esp-idf/components/heap/tlsf -IC:/esp32/v5.5.1/esp-idf/components/log/include -IC:/esp32/v5.5.1/esp-idf/components/soc/include -IC:/esp32/v5.5.1/esp-idf/components/soc/esp32s3 -IC:/esp32/v5.5.1/esp-idf/components/soc/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/soc/esp32s3/register -IC:/esp32/v5.5.1/esp-idf/components/hal/platform_port/include -IC:/esp32/v5.5.1/esp-idf/components/hal/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/hal/include -IC:/esp32/v5.5.1/esp-idf/components/esp_rom/include -IC:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/include/esp32s3 -IC:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3 -IC:/esp32/v5.5.1/esp-idf/components/esp_common/include -IC:/esp32/v5.5.1/esp-idf/components/esp_system/include -IC:/esp32/v5.5.1/esp-idf/components/esp_system/port/soc -IC:/esp32/v5.5.1/esp-idf/components/esp_system/port/include/private -IC:/esp32/v5.5.1/esp-idf/components/xtensa/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/xtensa/include -IC:/esp32/v5.5.1/esp-idf/components/xtensa/deprecated_include -IC:/esp32/v5.5.1/esp-idf/components/lwip/include -IC:/esp32/v5.5.1/esp-idf/components/lwip/include/apps -IC:/esp32/v5.5.1/esp-idf/components/lwip/include/apps/sntp -IC:/esp32/v5.5.1/esp-idf/components/lwip/lwip/src/include -IC:/esp32/v5.5.1/esp-idf/components/lwip/port/include -IC:/esp32/v5.5.1/esp-idf/components/lwip/port/freertos/include -IC:/esp32/v5.5.1/esp-idf/components/lwip/port/esp32xx/include -IC:/esp32/v5.5.1/esp-idf/components/lwip/port/esp32xx/include/arch -IC:/esp32/v5.5.1/esp-idf/components/lwip/port/esp32xx/include/sys -IC:/esp32/v5.5.1/esp-idf/components/driver/deprecated -IC:/esp32/v5.5.1/esp-idf/components/driver/i2c/include -IC:/esp32/v5.5.1/esp-idf/components/driver/touch_sensor/include -IC:/esp32/v5.5.1/esp-idf/components/driver/twai/include -IC:/esp32/v5.5.1/esp-idf/components/driver/touch_sensor/esp32s3/include -IC:/esp32/v5.5.1/esp-idf/components/esp_pm/include -IC:/esp32/v5.5.1/esp-idf/components/esp_ringbuf/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_gpio/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_pcnt/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_gptimer/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_spi/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_mcpwm/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_ana_cmpr/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_i2s/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_sdmmc/include -IC:/esp32/v5.5.1/esp-idf/components/sdmmc/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_sdspi/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_sdio/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_dac/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_rmt/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_tsens/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_sdm/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_i2c/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_uart/include -IC:/esp32/v5.5.1/esp-idf/components/vfs/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_ledc/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_parlio/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_usb_serial_jtag/include -IC:/esp32/v5.5.1/esp-idf/components/esp_driver_twai/include -mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-error=extra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -O0 -fmacro-prefix-map=D:/ESP32/1=. -fmacro-prefix-map=C:/esp32/v5.5.1/esp-idf=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu++2b -fno-exceptions -fno-rtti -fuse-cxa-atexit -MD -MT esp-idf/OLED/CMakeFiles/__idf_OLED.dir/OLED.C.obj -MF esp-idf\OLED\CMakeFiles\__idf_OLED.dir\OLED.C.obj.d -o esp-idf/OLED/CMakeFiles/__idf_OLED.dir/OLED.C.obj -c D:/ESP32/1/components/OLED/OLED.C D:/ESP32/1/components/OLED/OLED.C:82:2: error: 'i2c_device_handle_t' does not name a type; did you mean 'i2c_device_config_t'? 82 | i2c_device_handle_t oled_dev_handle; | ^~~~~~~~~~~~~~~~~~~ | i2c_device_config_t D:/ESP32/1/components/OLED/OLED.C: In function 'void I2C_Init()': D:/ESP32/1/components/OLED/OLED.C:102:9: error: either all initializer clauses should be designated or none of them should be 102 | .flags.enable_internal_pullup = false, //绂佺敤鍐呴儴涓婃媺鐢甸樆锛堝墠鎻愭槸宸茬粡澶栭儴涓婃媺锛? | ^ D:/ESP32/1/components/OLED/OLED.C:102:9: error: expected primary-expression before '.' token D:/ESP32/1/components/OLED/OLED.C:114:9: error: either all initializer clauses should be designated or none of them should be 114 | .flags.disable_ack_check = false, //鍚敤ACK妫€鏌? | ^ D:/ESP32/1/components/OLED/OLED.C:114:9: error: expected primary-expression before '.' token In file included from C:/esp32/v5.5.1/esp-idf/components/esp_driver_i2c/include/driver/i2c_master.h:10, from D:/ESP32/1/components/OLED/OLED.h:9, from D:/ESP32/1/components/OLED/OLED.C:20: D:/ESP32/1/components/OLED/OLED.C:118:79: error: 'oled_dev_handle' was not declared in this scope; did you mean 'oled_bus_handle'? 118 | ESP_ERROR_CHECK(i2c_master_bus_add_device(oled_bus_handle, &i2c_dev_cfg, &oled_dev_handle)); | ^~~~~~~~~~~~~~~ C:/esp32/v5.5.1/esp-idf/components/esp_common/include/esp_err.h:116:30: note: in definition of macro 'ESP_ERROR_CHECK' 116 | esp_err_t err_rc_ = (x); \ | ^ D:/ESP32/1/components/OLED/OLED.C: In function 'void OLED_WriteCommand(uint8_t)': D:/ESP32/1/components/OLED/OLED.C:136:41: error: 'oled_dev_handle' was not declared in this scope; did you mean 'oled_bus_handle'? 136 | ESP_ERROR_CHECK(i2c_master_transmit(oled_dev_handle, writebuffer, 2, -1)); | ^~~~~~~~~~~~~~~ C:/esp32/v5.5.1/esp-idf/components/esp_common/include/esp_err.h:116:30: note: in definition of macro 'ESP_ERROR_CHECK' 116 | esp_err_t err_rc_ = (x); \ | ^ D:/ESP32/1/components/OLED/OLED.C: In function 'void OLED_WriteData(uint8_t*, uint8_t)': D:/ESP32/1/components/OLED/OLED.C:156:41: error: 'oled_dev_handle' was not declared in this scope; did you mean 'oled_bus_handle'? 156 | ESP_ERROR_CHECK(i2c_master_transmit(oled_dev_handle, writebuffer, Count+1, -1)); | ^~~~~~~~~~~~~~~ C:/esp32/v5.5.1/esp-idf/components/esp_common/include/esp_err.h:116:30: note: in definition of macro 'ESP_ERROR_CHECK' [1073/1082] Performing configure step for 'bootloader' -- Found Git: C:/esp32/Espressif/tools/tools/idf-git/2.39.2/cmd/git.exe (found version "2.39.2.windows.1") -- Minimal build - OFF -- The C compiler identification is GNU 14.2.0 -- The CXX compiler identification is GNU 14.2.0 -- The ASM compiler identification is GNU -- Found assembler: C:/esp32/Espressif/tools/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-gcc.exe -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/esp32/Espressif/tools/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-gcc.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/esp32/Espressif/tools/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin/xtensa-esp32s3-elf-g++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Building ESP-IDF components for target esp32s3 -- Project sdkconfig file D:/ESP32/1/sdkconfig -- Compiler supported targets: xtensa-esp-elf -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/soc/esp32s3/ld/esp32s3.peripherals.ld -- Bootloader project name: "bootloader" version: 1 -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.api.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.bt_funcs.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.libgcc.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.wdt.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.version.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.libc.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.newlib.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/bootloader/subproject/main/ld/esp32s3/bootloader.ld -- Adding linker script C:/esp32/v5.5.1/esp-idf/components/bootloader/subproject/main/ld/esp32s3/bootloader.rom.ld -- Components: bootloader bootloader_support efuse esp_app_format esp_bootloader_format esp_common esp_hw_support esp_rom esp_security esp_system esptool_py freertos hal log main micro-ecc newlib partition_table soc spi_flash xtensa -- Component paths: C:/esp32/v5.5.1/esp-idf/components/bootloader C:/esp32/v5.5.1/esp-idf/components/bootloader_support C:/esp32/v5.5.1/esp-idf/components/efuse C:/esp32/v5.5.1/esp-idf/components/esp_app_format C:/esp32/v5.5.1/esp-idf/components/esp_bootloader_format C:/esp32/v5.5.1/esp-idf/components/esp_common C:/esp32/v5.5.1/esp-idf/components/esp_hw_support C:/esp32/v5.5.1/esp-idf/components/esp_rom C:/esp32/v5.5.1/esp-idf/components/esp_security C:/esp32/v5.5.1/esp-idf/components/esp_system C:/esp32/v5.5.1/esp-idf/components/esptool_py C:/esp32/v5.5.1/esp-idf/components/freertos C:/esp32/v5.5.1/esp-idf/components/hal C:/esp32/v5.5.1/esp-idf/components/log C:/esp32/v5.5.1/esp-idf/components/bootloader/subproject/main C:/esp32/v5.5.1/esp-idf/components/bootloader/subproject/components/micro-ecc C:/esp32/v5.5.1/esp-idf/components/newlib C:/esp32/v5.5.1/esp-idf/components/partition_table C:/esp32/v5.5.1/esp-idf/components/soc C:/esp32/v5.5.1/esp-idf/components/spi_flash C:/esp32/v5.5.1/esp-idf/components/xtensa -- Configuring done (19.4s) -- Generating done (0.3s) -- Build files have been written to: D:/ESP32/1/build/bootloader ninja: build stopped: subcommand failed.
最新发布
11-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值