ESP32-NODEMCU V1.1在Arduino IDE编译时出现ADC相关语法错误的解决方法咨询
解决ESP32 NodeMCU V1.1编译时
__attribute__相关错误的方法 你遇到的是ESP32 Arduino核心与旧版IDE/编译器的兼容性问题,结合报错信息里枚举定义的__attribute__((deprecated))语法不被识别的情况,下面是几个靠谱的解决步骤:
1. 更新ESP32 Arduino核心到稳定版
这是最直接的解决方法,旧版本的ESP32核心里的ADC类型定义存在编译器兼容问题:
- 打开Arduino IDE,进入
文件 > 首选项,确认“附加开发板管理器网址”中包含https://dl.espressif.com/dl/package_esp32_index.json(如果没有就添加进去) - 打开
工具 > 开发板 > 开发板管理器,搜索“ESP32”,找到esp32 by Espressif Systems,点击更新到最新的稳定版本(建议至少v2.0.0以上) - 更新完成后,重新选择
NodeMCU-32S开发板(保持你原来的配置:40MHz、921600波特率、None),再尝试编译代码
2. 升级Arduino IDE版本(推荐)
你当前使用的Arduino IDE 1.8.15发布于2021年,自带的GCC编译器版本较老,对ESP32新语法的支持不足:
- 下载最新的1.8.x稳定版或2.x版本(2.x版本是全新UI,对ESP32的支持更完善)
- 安装完成后,重新按照步骤1安装/更新ESP32开发板核心,再进行编译
3. 临时修改头文件(应急方案,不推荐)
如果暂时无法更新环境,可以临时修改报错的头文件绕过问题,但这只是权宜之计:
- 找到报错文件的路径:
C:\Program Files (x86)\Arduino\hardware\expressif\esp32/tools/sdk/esp32/include/hal/include/hal/adc_types.h - 用文本编辑器打开该文件,找到第90行,将:
修改为:ADC_DIGI_FORMAT_12BIT __attribute__((deprecated)),ADC_DIGI_FORMAT_12BIT, - 保存文件后重新编译,但后续更新ESP32核心时这个修改会被覆盖,且可能引发其他未知问题,优先选择前两种方法
报错原因说明
这个错误的本质是旧版本的GCC编译器不支持在枚举成员中直接使用__attribute__((deprecated))语法,而新版ESP32核心引入了这个语法标记废弃枚举值,导致旧编译器无法识别。更新核心或IDE后,编译器版本会同步升级,就能兼容这个语法了。
内容的提问来源于stack exchange,提问作者Sara




