Esta solución ha sido probada en el microcontrolador ESP32 (Espressif)
Requisitos previos
- GNU++11 como estándar del core
- PlatformIO Core 6.1.18 o superior
- curl 8.14.1 o superior (o alternativamente wget 1.25.0 o superior)
- Python 3.13.5 o superior
- Carpeta de instalación
.platformioen/home/USUARIO/ - Vim 9.2.1 o Neovim 0.11.5 o superior
- LazyVim (opcional)
- Mason.nvim 2.2.1 o superior
- clangd 21.1.8 o superior
Creación de un proyecto en PlatformIO para ESP32 Pico
Crear la carpeta del proyecto
mkdir -p proyecto1
cd proyecto1/
pio --boards list | grep esp32
pio project init --board pico32 --ide vim
pio run -t compiledb
Correcion de error fno-tree-switch-conversion con archivo yaml
El compilador Clangd necesita de el compile_commands.json para encontrar las rutas que establece el compilador de Xtensa. Aunque hay problemas en la lectura de las cabeceras, por lo que es necesario hacer un archivo .clangd o clangd.yaml. Fuentes:
En la carpeta raiz crear un archivo con el nombre: .clangd o clangd.yaml
:/proyecto1$ touch .clangd
Copiar este codigo a .clangd, e introducir la informacion segun sea.
CompileFlags:
#Binario del compilador de Xtensa para archivos con extension .cpp
Compiler: /home/USUARIO/.platformio/packages/toolchain-xtensa-esp32/bin/xtensa-esp32-elf-g++
Add: [
#Correccion de banderas de clangd a gcc
"-D__GNUC__=8",
"-D__GNUC_MINOR__=4",
"-D__GNUC_PATCHLEVEL__=0",
"-D__GXX_EXPERIMENTAL_CXX0X__=1",
# Solucion para el error GLIBC
"-D__GLIBC_USE(x)=0",
"-D__GLIBC_PREREQ(x,y)=0",
# Forzar modo para esp32 y no x86_64
"-x", "c++",
"-fno-exceptions",
"-std=gnu++11",
"--target=xtensa-esp32-elf",
"-DARDUINO=10812",
"-DARDUINO_ARCH_ESP32",
"-DARDUINO_VARIANT=\"esp32\"",
"-DESP32",
# TOOLCHAIN (LibrerIa estándar de C/C++) ---
"-isystem", "/home/USUARIO/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0",
"-isystem", "/home/USUARIO/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/xtensa-esp32-elf",
"-isystem", "/home/USUARIO/.platformio/packages/toolchain-xtensa-esp32/lib/gcc/xtensa-esp32-elf/8.4.0/include",
"-isystem", "/home/USUARIO/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include",
# CORE ARDUINO (Marco Arduino) ---
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/variants/esp32",
# LIBRERIAS INTEGRADAS
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"-I/home/USUARIO/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
]
#Quitar todos los errores que arroja clangd y banderas que no puede interpretar
Remove: [
"-mlongcalls",
"-mlong-calls",
"-fno-tree-switch-conversion",
"-fstrict-volatile-bitfields",
"-mfix-esp32-erratum-76",
"-fno-shrink-wrap",
"-fno-tree-pre"
]
Diagnostics:
Suppress: [
"drv_unknown_argument",
"pp_file_not_found",
"unknown_argument",
"illegal_use_of_builtin"
]
Top comments (0)