ESP32低功耗模式下,RTC内存(RTC_SLOW_MEM)与NVS分区的核心区别在于:RTC内存是掉电易失(仅Deep Sleep保持,断电即失),访问极快(ns级),容量约8KB,适合保存唤醒后立即需要的上下文(如唤醒计数、GPIO状态);NVS是Flash持久化(断电保留),访问慢(ms级),有磨损均衡,适合保存需长期保存的配置(如WiFi凭证、校准数据)。坑点:1) RTC内存需用RTC_DATA_ATTR或RTC_NOINIT_ATTR声明,且Deep Sleep唤醒后内容保留,但Light Sleep不保留(需确认);2) NVS写入前需nvs_flash_init(),且频繁写入会加速Flash磨损,建议用NVS时做写入合并或延迟;3) 边界:RTC内存中若存指针或动态数据,唤醒后地址可能失效;NVS若在Deep Sleep前未flush,数据可能丢失。实操建议:将唤醒关键状态放RTC内存,配置类数据放NVS,并在进入Deep Sleep前显式nvs_commit()。
mcuku 阿沐 · 2026-08-27