You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP-IDF V5编译LVGL ESP32移植项目时esp_timer错误修复

问题

为搭载ESP32-S3-WROVER芯片的WT32-SC01 PLUS(3.5英寸320X480)模块编译LVGL移植到ESP32的Demo项目,使用ESP-IDF V5版本,执行以下命令:

idf.py set-target esp32s3
idf.py build

出现多个编译错误:

C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c: In function 'guiTask':
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:144:11: error: unknown type name 'esp_timer_create_args_t'
  144 |     const esp_timer_create_args_t periodic_timer_args = {
      |           ^~~~~~~~~~~~~~~~~~~~~~~
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:145:9: error: field name not in record or union initializer
  145 |         .callback = &lv_tick_task,
      |         ^
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:145:9: note: (near initialization for 'periodic_timer_args')
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:145:21: warning: initialization of 'int' from 'void (*)(void *)' makes integer from pointer without a cast [-Wint-conversion]
  145 |         .callback = &lv_tick_task,
      |                     ^
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:145:21: note: (near initialization for 'periodic_timer_args')
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:146:9: error: field name not in record or union initializer
  146 |         .name = "periodic_gui"
      |         ^
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:146:9: note: (near initialization for 'periodic_timer_args')
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:146:17: warning: excess elements in scalar initializer
  146 |         .name = "periodic_gui"
      |                 ^~~~~~~~~~~~~~
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:146:17: note: (near initialization for 'periodic_timer_args')
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:148:5: error: unknown type name 'esp_timer_handle_t'
  148 |     esp_timer_handle_t periodic_timer;
      |     ^~~~~~~~~~~~~~~~~~
In file included from C:/espressif/esp-idf/components/esp_hw_support/include/esp_intr_alloc.h:11,
                 from C:/espressif/esp-idf/components/esp_hw_support/include/esp_cpu.h:20,
                 from C:/espressif/esp-idf/components/esp_hw_support/include/spinlock.h:11,
                 from C:/espressif/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h:74,
                 from C:/espressif/esp-idf/components/freertos/FreeRTOS-Kernel/include/freertos/portable.h:58,
                 from C:/espressif/esp-idf/components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h:70,
                 from C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:16:
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:149:21: error: implicit declaration of function 'esp_timer_create' [-Werror=implicit-function-declaration]
  149 |     ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
      |                     ^~~~~~~~~~~~~~~~
C:/espressif/esp-idf/components/esp_common/include/esp_err.h:117:30: note: in definition of macro 'ESP_ERROR_CHECK'
  117 |         esp_err_t err_rc_ = (x);                                        \
      |                              ^
C:/cpp_test/!esp32/lv_port_esp32_esp_idf_5/main/main.c:150:21: error: implicit declaration of function 'esp_timer_start_periodic' [-Werror=implicit-function-declaration]
  150 |     ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, LV_TICK_PERIOD_MS * 1000));
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~
C:/espressif/esp-idf/components/esp_common/include/esp_err.h:117:30: note: in definition of macro 'ESP_ERROR_CHECK'
  117 |         esp_err_t err_rc_ = (x);                                        \
      |                              ^

修复方案

这些错误核心是ESP-IDF V5中esp_timer相关的API未被正确引入,按以下步骤解决:

  • 添加esp_timer头文件
    在main.c的开头引入头文件,补全类型和函数声明:
#include "esp_timer.h"
  • 确认组件依赖配置
    检查项目的依赖配置,确保esp_timer组件被正确引入:
    • 若使用CMake,在main/CMakeLists.txt中添加:
      REQUIRES esp_timer
      
    • 若使用组件管理器,在idf_component.yml中添加:
      dependencies:
        idf:
          version: ">=5.0"
        esp_timer: ~
      

执行idf.py reconfigure更新配置。

  • 验证回调函数签名
    确保lv_tick_task的函数签名符合ESP-IDF要求,应为:
void lv_tick_task(void* arg)

签名不匹配会导致类型转换警告,需调整函数定义。

内容的提问来源于stack exchange,提问作者vico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:42:22