G - Apple Tree

本文描述了一道关于苹果树管理的算法题目,涉及到的数据结构包括树状结构,并且需要实现查询和更新操作来统计子树中苹果的数量。初始时树上的每个节点都有一颗苹果,随着苹果被摘取或新苹果长出,需要实时更新数量。
Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u

[Submit]   [Go Back]   [Status]

Description

There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple tree.

The tree has N forks which are connected by branches. Kaka numbers the forks by 1 to N and the root is always numbered by 1. Apples will grow on the forks and two apple won't grow on the same fork. kaka wants to know how many apples are there in a sub-tree, for his study of the produce ability of the apple tree.

The trouble is that a new apple may grow on an empty fork some time and kaka may pick an apple from the tree for his dessert. Can you help kaka?


Input

The first line contains an integer N (N ≤ 100,000) , which is the number of the forks in the tree.
The following N - 1 lines each contain two integers u and v, which means fork u and fork v are connected by a branch.
The next line contains an integer M (M ≤ 100,000).
The following M lines each contain a message which is either
"x" which means the existence of the apple on fork x has been changed. i.e. if there is an apple on the fork, then Kaka pick it; otherwise a new apple has grown on the empty fork.
or
"x" which means an inquiry for the number of apples in the sub-tree above the fork x, including the apple (if exists) on the fork x
Note the tree is full of apples at the beginning

Output

For every inquiry, output the correspond answer per line.

Sample Input

3
1 2
1 3
3
Q 1
C 2
Q 1

Sample Output

3
2

* 正在执行任务: D:\Espressif\tools\ninja\1.12.1\ninja.EXE [2/19] Performing build step for 'bootloader' [1/1] C:\Windows\system32\cmd.exe /C "cd /D C:\Users\Lenovo\esp32_electronic_piano\build\bootloader\esp-idf\esptool_py && D:\Espressif\python_env\idf5.5_py3.11_env\Scripts\python.exe D:/Espressif/frameworks/esp-idf-v5.5/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x1000 C:/Users/Lenovo/esp32_electronic_piano/build/bootloader/bootloader.bin" Bootloader binary size 0x6680 bytes. 0x980 bytes (8%) free. [4/19] Building C object esp-idf/ttp229/CMakeFiles/__idf_ttp229.dir/src/ttp229.c.obj FAILED: esp-idf/ttp229/CMakeFiles/__idf_ttp229.dir/src/ttp229.c.obj ccache D:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32-elf-gcc.exe -DESP_PLATFORM -DIDF_VER=\"v5.5-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 -IC:/Users/Lenovo/esp32_electronic_piano/build/config -IC:/Users/Lenovo/esp32_electronic_piano/components/ttp229/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/newlib/platform_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/esp_additions/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/dma/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/ldo/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/debug_probe/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/power_supply/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/. -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/tlsf -ID:/Espressif/frameworks/esp-idf-v5.5/components/log/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/register -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/platform_port/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/include/private -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/deprecated_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/deprecated -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/twai/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_pm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_ringbuf/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gpio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_pcnt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gptimer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_spi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_mcpwm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ana_cmpr/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2s/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdspi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_dac/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_rmt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_tsens/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_uart/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ledc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_parlio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_usb_serial_jtag/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_twai/include -mlongcalls -Wno-frame-address -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 -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Users/Lenovo/esp32_electronic_piano=. -fmacro-prefix-map=D:/Espressif/frameworks/esp-idf-v5.5=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/ttp229/CMakeFiles/__idf_ttp229.dir/src/ttp229.c.obj -MF esp-idf\ttp229\CMakeFiles\__idf_ttp229.dir\src\ttp229.c.obj.d -o esp-idf/ttp229/CMakeFiles/__idf_ttp229.dir/src/ttp229.c.obj -c C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:6:14: error: conflicting types for 'tp_to_led_idx'; have 'const int8_t[16]' {aka 'const signed char[16]'} 6 | const int8_t tp_to_led_idx[16] = { | ^~~~~~~~~~~~~ In file included from C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:1: C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/include/ttp229.h:8:15: note: previous declaration of 'tp_to_led_idx' with type 'int8_t[16]' {aka 'signed char[16]'} 8 | extern int8_t tp_to_led_idx[16]; | ^~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:14:11: error: conflicting types for 'note_freqs'; have 'const int[16]' 14 | const int note_freqs[16] = { | ^~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/include/ttp229.h:9:12: note: previous declaration of 'note_freqs' with type 'int[16]' 9 | extern int note_freqs[16]; | ^~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:19:15: error: conflicting types for 'key_map'; have 'const uint8_t[16]' {aka 'const unsigned char[16]'} 19 | const uint8_t key_map[16] = {3,2,1,0,15,14,13,12,8,9,10,11,4,5,6,7}; | ^~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/include/ttp229.h:10:16: note: previous declaration of 'key_map' with type 'uint8_t[16]' {aka 'unsigned char[16]'} 10 | extern uint8_t key_map[16]; | ^~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c: In function 'ttp229_init': C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:30:5: error: implicit declaration of function 'vTaskDelay' [-Wimplicit-function-declaration] 30 | vTaskDelay(pdMS_TO_TICKS(10)); | ^~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:30:16: error: implicit declaration of function 'pdMS_TO_TICKS' [-Wimplicit-function-declaration] 30 | vTaskDelay(pdMS_TO_TICKS(10)); | ^~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c: In function 'ttp229_read_keys': C:/Users/Lenovo/esp32_electronic_piano/components/ttp229/src/ttp229.c:36:5: error: implicit declaration of function 'esp_rom_delay_us' [-Wimplicit-function-declaration] 36 | esp_rom_delay_us(2); | ^~~~~~~~~~~~~~~~ [5/19] Building C object esp-idf/ws2812b/CMakeFiles/__idf_ws2812b.dir/src/ws2812b.c.obj FAILED: esp-idf/ws2812b/CMakeFiles/__idf_ws2812b.dir/src/ws2812b.c.obj ccache D:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32-elf-gcc.exe -DESP_PLATFORM -DIDF_VER=\"v5.5-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 -IC:/Users/Lenovo/esp32_electronic_piano/build/config -IC:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/newlib/platform_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/esp_additions/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/dma/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/ldo/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/debug_probe/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/power_supply/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/. -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/tlsf -ID:/Espressif/frameworks/esp-idf-v5.5/components/log/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/register -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/platform_port/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/include/private -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/deprecated_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/deprecated -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/twai/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_pm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_ringbuf/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gpio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_pcnt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gptimer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_spi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_mcpwm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ana_cmpr/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2s/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdspi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_dac/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_rmt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_tsens/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_uart/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ledc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_parlio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_usb_serial_jtag/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_twai/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/interface -mlongcalls -Wno-frame-address -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 -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Users/Lenovo/esp32_electronic_piano=. -fmacro-prefix-map=D:/Espressif/frameworks/esp-idf-v5.5=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/ws2812b/CMakeFiles/__idf_ws2812b.dir/src/ws2812b.c.obj -MF esp-idf\ws2812b\CMakeFiles\__idf_ws2812b.dir\src\ws2812b.c.obj.d -o esp-idf/ws2812b/CMakeFiles/__idf_ws2812b.dir/src/ws2812b.c.obj -c C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c In file included from C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:1: C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/include/ws2812b.h:19:1: warning: data definition has no type or storage class 19 | set_led_rgb(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness); | ^~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/include/ws2812b.h:19:1: error: type defaults to 'int' in declaration of 'set_led_rgb' [-Wimplicit-int] C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:53:2: error: return type defaults to 'int' [-Wimplicit-int] 53 | set_led_rgb(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness) { | ^~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c: In function 'led_fade_task': C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:89:35: error: implicit declaration of function 'sinf' [-Wimplicit-function-declaration] 89 | float v = (1.0f + sinf((pos*2.0f*M_PI)/NUM_LEDS)) * 0.5f; | ^~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:2:1: note: include '<math.h>' or provide a declaration of 'sinf' 1 | #include "ws2812b.h" +++ |+#include <math.h> 2 | #include "led_strip.h" C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:89:35: warning: incompatible implicit declaration of built-in function 'sinf' [-Wbuiltin-declaration-mismatch] 89 | float v = (1.0f + sinf((pos*2.0f*M_PI)/NUM_LEDS)) * 0.5f; | ^~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:89:35: note: include '<math.h>' or provide a declaration of 'sinf' C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c: In function 'set_led_rgb': C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/src/ws2812b.c:58:1: error: control reaches end of non-void function [-Werror=return-type] 58 | } | ^ cc1.exe: some warnings being treated as errors [6/19] Building C object esp-idf/oled/CMakeFiles/__idf_oled.dir/src/oled.c.obj FAILED: esp-idf/oled/CMakeFiles/__idf_oled.dir/src/oled.c.obj ccache D:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32-elf-gcc.exe -DESP_PLATFORM -DIDF_VER=\"v5.5-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 -IC:/Users/Lenovo/esp32_electronic_piano/build/config -IC:/Users/Lenovo/esp32_electronic_piano/components/oled/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/newlib/platform_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/esp_additions/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/dma/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/ldo/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/debug_probe/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/power_supply/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/. -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/tlsf -ID:/Espressif/frameworks/esp-idf-v5.5/components/log/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/register -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/platform_port/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/include/private -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/deprecated_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/deprecated -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/twai/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_pm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_ringbuf/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gpio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_pcnt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gptimer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_spi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_mcpwm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ana_cmpr/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2s/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdspi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_dac/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_rmt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_tsens/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_uart/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ledc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_parlio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_usb_serial_jtag/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_twai/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/interface -mlongcalls -Wno-frame-address -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 -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Users/Lenovo/esp32_electronic_piano=. -fmacro-prefix-map=D:/Espressif/frameworks/esp-idf-v5.5=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/oled/CMakeFiles/__idf_oled.dir/src/oled.c.obj -MF esp-idf\oled\CMakeFiles\__idf_oled.dir\src\oled.c.obj.d -o esp-idf/oled/CMakeFiles/__idf_oled.dir/src/oled.c.obj -c C:/Users/Lenovo/esp32_electronic_piano/components/oled/src/oled.c C:/Users/Lenovo/esp32_electronic_piano/components/oled/src/oled.c:6:10: fatal error: spi_master.h: No such file or directory 6 | #include "spi_master.h" | ^~~~~~~~~~~~~~ compilation terminated. [7/19] Building C object esp-idf/buzzer/CMakeFiles/__idf_buzzer.dir/src/buzzer.c.obj FAILED: esp-idf/buzzer/CMakeFiles/__idf_buzzer.dir/src/buzzer.c.obj ccache D:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32-elf-gcc.exe -DESP_PLATFORM -DIDF_VER=\"v5.5-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 -IC:/Users/Lenovo/esp32_electronic_piano/build/config -IC:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/newlib/platform_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/esp_additions/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/dma/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/ldo/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/debug_probe/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/power_supply/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/. -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/tlsf -ID:/Espressif/frameworks/esp-idf-v5.5/components/log/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/register -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/platform_port/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/include/private -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/deprecated_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/deprecated -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/twai/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_pm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_ringbuf/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gpio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_pcnt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gptimer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_spi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_mcpwm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ana_cmpr/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2s/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdspi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_dac/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_rmt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_tsens/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_uart/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ledc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_parlio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_usb_serial_jtag/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_twai/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/interface -mlongcalls -Wno-frame-address -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 -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Users/Lenovo/esp32_electronic_piano=. -fmacro-prefix-map=D:/Espressif/frameworks/esp-idf-v5.5=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/buzzer/CMakeFiles/__idf_buzzer.dir/src/buzzer.c.obj -MF esp-idf\buzzer\CMakeFiles\__idf_buzzer.dir\src\buzzer.c.obj.d -o esp-idf/buzzer/CMakeFiles/__idf_buzzer.dir/src/buzzer.c.obj -c C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:10:61: error: conflicting types for 'tone_t'; have 'struct <anonymous>' 10 | typedef struct { float freq; float dur; const char *note; } tone_t; | ^~~~~~ In file included from C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:1: C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include/buzzer.h:17:61: note: previous declaration of 'tone_t' with type 'tone_t' 17 | typedef struct { float freq; float dur; const char *note; } tone_t; | ^~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:11:14: error: conflicting types for 'blessing'; have 'const tone_t[]' 11 | const tone_t blessing[] = { | ^~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include/buzzer.h:18:21: note: previous declaration of 'blessing' with type 'const tone_t[]' 18 | extern const tone_t blessing[]; | ^~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:2232:14: error: conflicting types for 'monitoring'; have 'const tone_t[]' 2232 | const tone_t monitoring[] = { | ^~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include/buzzer.h:19:21: note: previous declaration of 'monitoring' with type 'const tone_t[]' 19 | extern const tone_t monitoring[]; | ^~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:3927:14: error: conflicting types for 'bad_apple'; have 'const tone_t[]' 3927 | const tone_t bad_apple[] = { | ^~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include/buzzer.h:20:21: note: previous declaration of 'bad_apple' with type 'const tone_t[]' 20 | extern const tone_t bad_apple[]; | ^~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5596:15: error: conflicting types for 'music_tracks'; have 'const tone_t *[3]' 5596 | const tone_t* music_tracks[3] = {blessing, monitoring, bad_apple}; | ^~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include/buzzer.h:22:22: note: previous declaration of 'music_tracks' with type 'const tone_t *[3]' 22 | extern const tone_t* music_tracks[3]; | ^~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c: In function 'blessing_task': C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5628:5: error: implicit declaration of function 'ESP_LOGI'; did you mean 'ESP_OK'? [-Wimplicit-function-declaration] 5628 | ESP_LOGI(TAG, "Blessing task started"); | ^~~~~~~~ | ESP_OK C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5628:14: error: 'TAG' undeclared (first use in this function) 5628 | ESP_LOGI(TAG, "Blessing task started"); | ^~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5628:14: note: each undeclared identifier is reported only once for each function it appears in C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5642:13: error: implicit declaration of function 'led_update_from_state' [-Wimplicit-function-declaration] 5642 | led_update_from_state(); | ^~~~~~~~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c: In function 'start_blessing_task': C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5664:9: error: implicit declaration of function 'ESP_LOGW'; did you mean 'ESP_OK'? [-Wimplicit-function-declaration] 5664 | ESP_LOGW(TAG,"Create blessing task failed"); | ^~~~~~~~ | ESP_OK C:/Users/Lenovo/esp32_electronic_piano/components/buzzer/src/buzzer.c:5664:18: error: 'TAG' undeclared (first use in this function) 5664 | ESP_LOGW(TAG,"Create blessing task failed"); | ^~~ [9/19] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/esp32_electronic_piano_main.c.obj FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/esp32_electronic_piano_main.c.obj ccache D:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin\xtensa-esp32-elf-gcc.exe -DESP_PLATFORM -DIDF_VER=\"v5.5-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 -IC:/Users/Lenovo/esp32_electronic_piano/build/config -IC:/Users/Lenovo/esp32_electronic_piano/main -ID:/Espressif/frameworks/esp-idf-v5.5/components/newlib/platform_include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/config/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -ID:/Espressif/frameworks/esp-idf-v5.5/components/freertos/esp_additions/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/dma/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/ldo/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/debug_probe/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/power_supply/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/. -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/port/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/heap/tlsf -ID:/Espressif/frameworks/esp-idf-v5.5/components/log/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/soc/esp32/register -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/platform_port/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/hal/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32/include/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_rom/esp32 -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/soc -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_system/port/include/private -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/xtensa/deprecated_include -IC:/Users/Lenovo/esp32_electronic_piano/components/buzzer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/deprecated -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/twai/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/driver/touch_sensor/esp32/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_pm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_ringbuf/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gpio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_pcnt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_gptimer/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_spi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_mcpwm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ana_cmpr/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2s/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/sdmmc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdspi/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_dac/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_rmt/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_tsens/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_sdm/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_i2c/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_uart/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_ledc/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_parlio/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_usb_serial_jtag/include -ID:/Espressif/frameworks/esp-idf-v5.5/components/esp_driver_twai/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/include -IC:/Users/Lenovo/esp32_electronic_piano/managed_components/espressif__led_strip/interface -IC:/Users/Lenovo/esp32_electronic_piano/components/ttp229/include -IC:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/include -IC:/Users/Lenovo/esp32_electronic_piano/components/oled/include -mlongcalls -Wno-frame-address -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 -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Users/Lenovo/esp32_electronic_piano=. -fmacro-prefix-map=D:/Espressif/frameworks/esp-idf-v5.5=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/main/CMakeFiles/__idf_main.dir/esp32_electronic_piano_main.c.obj -MF esp-idf\main\CMakeFiles\__idf_main.dir\esp32_electronic_piano_main.c.obj.d -o esp-idf/main/CMakeFiles/__idf_main.dir/esp32_electronic_piano_main.c.obj -c C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c In file included from C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:20: C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/include/ws2812b.h:19:1: warning: data definition has no type or storage class 19 | set_led_rgb(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness); | ^~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/components/ws2812b/include/ws2812b.h:19:1: error: type defaults to 'int' in declaration of 'set_led_rgb' [-Wimplicit-int] In file included from D:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/esp_intr_alloc.h:12, from D:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/esp_cpu.h:21, from D:/Espressif/frameworks/esp-idf-v5.5/components/esp_hw_support/include/spinlock.h:11, from D:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h:49, from D:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include/freertos/portable.h:57, from D:/Espressif/frameworks/esp-idf-v5.5/components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h:69, from C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:6: C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c: In function 'app_main': C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:78:65: error: 'spi_oled' undeclared (first use in this function) 78 | ESP_ERROR_CHECK(spi_bus_add_device(OLED_SPI_HOST, &devcfg, &spi_oled)); | ^~~~~~~~ D:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include/esp_err.h:116:30: note: in definition of macro 'ESP_ERROR_CHECK' 116 | esp_err_t err_rc_ = (x); \ | ^ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:78:65: note: each undeclared identifier is reported only once for each function it appears in 78 | ESP_ERROR_CHECK(spi_bus_add_device(OLED_SPI_HOST, &devcfg, &spi_oled)); | ^~~~~~~~ D:/Espressif/frameworks/esp-idf-v5.5/components/esp_common/include/esp_err.h:116:30: note: in definition of macro 'ESP_ERROR_CHECK' 116 | esp_err_t err_rc_ = (x); \ | ^ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:88:5: error: implicit declaration of function 'oled_send_cmd'; did you mean 'oled_send_data'? [-Wimplicit-function-declaration] 88 | oled_send_cmd(init_cmds, sizeof(init_cmds)); | ^~~~~~~~~~~~~ | oled_send_data C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:104:17: error: 'current_menu' undeclared (first use in this function) 104 | if (current_menu == MENU_NONE) { | ^~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:104:33: error: 'MENU_NONE' undeclared (first use in this function) 104 | if (current_menu == MENU_NONE) { | ^~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:105:21: error: 'g_mode' undeclared (first use in this function) 105 | if (g_mode == MODE_LED_KEY_INTERACT) { | ^~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:105:31: error: 'MODE_LED_KEY_INTERACT' undeclared (first use in this function) 105 | if (g_mode == MODE_LED_KEY_INTERACT) { | ^~~~~~~~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:106:30: error: 'MODE_NORMAL' undeclared (first use in this function); did you mean 'FP_NORMAL'? 106 | g_mode = MODE_NORMAL; | ^~~~~~~~~~~ | FP_NORMAL C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:120:31: error: 'MODE_LED_GRADIENT_CYCLE' undeclared (first use in this function) 120 | if (g_mode == MODE_LED_GRADIENT_CYCLE) { | ^~~~~~~~~~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:122:21: error: 'gradient_run' undeclared (first use in this function) 122 | gradient_run = false; | ^~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:137:32: error: 'MENU_MUSIC_SELECT' undeclared (first use in this function) 137 | current_menu = MENU_MUSIC_SELECT; | ^~~~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:152:32: error: 'MENU_FUNC_SELECT' undeclared (first use in this function) 152 | current_menu = MENU_FUNC_SELECT; | ^~~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:176:30: error: 'MODE_BLESSING_PLAY' undeclared (first use in this function) 176 | g_mode = MODE_BLESSING_PLAY; | ^~~~~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:198:30: error: 'MODE_GAME' undeclared (first use in this function) 198 | g_mode = MODE_GAME; | ^~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:199:21: error: 'game_running' undeclared (first use in this function); did you mean 'eRunning'? 199 | game_running = true; | ^~~~~~~~~~~~ | eRunning C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:200:28: error: 'game_regions' undeclared (first use in this function) 200 | memset(game_regions, 0, sizeof(game_regions)); | ^~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:201:21: error: 'game_next_spawn' undeclared (first use in this function) 201 | game_next_spawn = xTaskGetTickCount() + pdMS_TO_TICKS(800); | ^~~~~~~~~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:275:36: error: 'oled_buf' undeclared (first use in this function) 275 | memset(oled_buf,0,OLED_BUF_SIZE); | ^~~~~~~~ C:/Users/Lenovo/esp32_electronic_piano/main/esp32_electronic_piano_main.c:285:62: warning: variable 'idx' set but not used [-Wunused-but-set-variable] 285 | int page = yy/8; int idx = page*OLED_WIDTH + xx; | ^~~ ninja: build stopped: subcommand failed. * 终端进程“D:\Espressif\tools\ninja\1.12.1\ninja.EXE”已终止,退出代码: 1。
最新发布
10-26
该问题属于“代码型”类型。 --- ### **代码概述** 当前项目为基于 ESP-IDF 的电子琴系统,包含多个自定义组件(`buzzer`、`ttp229`、`ws2812b`、`oled` 等),但在构建过程中出现**多处编译错误**,导致整体失败。主要问题集中在: - 头文件与源文件中**类型声明不一致** - 函数未声明或拼写错误 - 全局变量重复定义 - 必需头文件缺失 这些问题集中反映了模块化开发中的常见陷阱:缺乏统一接口规范和依赖管理混乱。 --- ### **代码解析** #### 1. `ttp229.c`:数组类型冲突与隐式函数调用 ```c const int8_t tp_to_led_idx[16] = { ... }; ``` 与其头文件声明: ```c extern int8_t tp_to_led_idx[16]; ``` ❌ **问题**:一个带 `const`,一个不带 → 类型不同 → 链接时报“conflicting types”。 ✅ **修复方案**: ```c // ttp229.h extern const int8_t tp_to_led_idx[16]; // 加上 const ``` 同时使用了未声明的函数: ```c vTaskDelay(pdMS_TO_TICKS(10)); esp_rom_delay_us(2); ``` ❌ 原因:缺少头文件。 ✅ 添加以下包含: ```c #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_rom_sys.h" // 提供 esp_rom_delay_us ``` --- #### 2. `ws2812b.h/c`:语法错误与数学函数缺失 在 `.h` 文件中有如下非法声明: ```c set_led_rgb(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness); ``` ❌ 错误点: - 没有返回类型 → 默认 `int`(警告) - 不是原型声明格式 ✅ 正确写法: ```c void set_led_rgb(int idx, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness); ``` 且实现中使用了 `sinf()`: ```c float v = (1.0f + sinf(...)) * 0.5f; ``` ❌ 报错:`implicit declaration of function 'sinf'` ✅ 解决方法: ```c #include <math.h> ``` 并确保链接时包含 `-lm`(ESP-IDF 默认处理)。 此外,函数末尾缺少返回值(虽无返回类型但仍报错): ```c } // control reaches end of non-void function ``` → 实际是编译器推断为 `int`,但没返回 → 改为显式 `void` 即可。 --- #### 3. `oled.c`:头文件路径错误 ```c #include "spi_master.h" ``` ❌ 错误:此头文件不存在或命名不正确。 ✅ 应替换为标准驱动头文件: ```c #include "driver/spi_master.h" ``` 这是 ESP-IDF 中 SPI 主机驱动的标准头路径。 --- #### 4. `buzzer.c`:结构体重复定义 & 日志宏缺失 关键错误: ```c typedef struct { float freq; ... } tone_t; ``` 已在 `buzzer.h` 中定义过,再次定义导致冲突。 ❌ 问题本质:`.h` 和 `.c` 各自定义相同 `typedef`,即使内容一样也视为冲突。 ✅ 解决方式: - 将 `tone_t` 定义**仅保留在头文件中** - `.c` 文件不再重新定义 同时调用日志函数: ```c ESP_LOGI(TAG, "..."); ``` ❌ 缺少必要定义: ```c #include "esp_log.h" #define TAG "BUZZER" ``` 否则 `TAG` 未声明,`ESP_LOGI` 也无法识别。 --- #### 5. `main.c`:全局符号污染与未声明变量 多个组件都试图定义相同的全局变量: ```c extern SemaphoreHandle_t led_mutex = NULL; // 在 buzzer.h, oled.h, ws2812b.h 中均出现 extern int selected_item = 0; ``` ❌ 导致: ``` error: redefinition of 'led_mutex' ``` 因为每个 `.c` 包含这些头文件后都会生成一份定义。 ✅ 正确做法: - 创建一个共享头文件如 `shared_state.h`: ```c // shared_state.h extern SemaphoreHandle_t led_mutex; extern int selected_item; ``` - 在任意一个 `.c` 文件中唯一定义: ```c // main.c 或 state.c SemaphoreHandle_t led_mutex = NULL; int selected_item = 0; ``` 其他所有地方只通过 `#include "shared_state.h"` 使用。 --- #### 6. `main.c` 中大量未声明标识符 如: ```c current_menu, MENU_NONE, g_mode, MODE_LED_KEY_INTERACT, game_running... ``` ❌ 表明状态机枚举、模式常量等未统一定义。 ✅ 建议创建枚举与宏定义: ```c // app_config.h typedef enum { MENU_NONE, MENU_MUSIC_SELECT, MENU_FUNC_SELECT } menu_t; typedef enum { MODE_NORMAL, MODE_LED_KEY_INTERACT, MODE_LED_GRADIENT_CYCLE, MODE_BLESSING_PLAY, MODE_GAME } mode_t; extern menu_t current_menu; extern mode_t g_mode; extern bool game_running; extern uint8_t game_regions[16]; extern TickType_t game_next_spawn; extern uint8_t oled_buf[OLED_BUF_SIZE]; ``` 并在 `main.c` 中定义一次。 --- #### 7. SPI 设备句柄未声明 ```c ESP_ERROR_CHECK(spi_bus_add_device(..., &spi_oled)); ``` ❌ `spi_oled` 未定义。 ✅ 定义变量: ```c spi_device_handle_t spi_oled; ``` --- #### 8. 函数名拼写错误 ```c oled_send_cmd(init_cmds, ...); ``` ❌ 可能应为 `oled_write_cmd` 或尚未实现。 ✅ 检查是否已实现该函数,或更正名称。 --- ### **知识点** - **头文件一致性**:`extern` 变量和类型定义必须在头文件与源文件间保持完全一致(包括 `const` 修饰符)。 - **全局变量管理**:避免在多个头文件中定义同一全局变量,应集中声明、单一定义。 - **模块化依赖**:跨组件共享数据时应使用独立头文件声明接口,防止循环包含与重复定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值