在ESP32低功耗设计中,RTC内存(RTC_DATA_ATTR)用于深睡唤醒后的快速恢复,数据保存在RTC域,深睡时保持,但掉电或复位会丢失;NVS分区则用于长期持久化,写入flash,但每次写入有磨损且耗时。最佳实践:将频繁更新的临时状态(如计数值、传感器校准)放RTC内存,仅在关键节点(如阈值触发、周期结束)写入NVS,避免频繁擦写。坑点:1) RTC内存容量有限(约8KB),需合理规划;2) NVS写入需考虑flash磨损均衡,建议使用nvs_set_*后调用nvs_commit,并控制写入频率;3) 深睡唤醒后,RTC内存内容保留,但需检查电源复位标志(esp_reset_reason)区分冷启动和唤醒,避免使用无效数据。实操建议:用RTC_DATA_ATTR定义结构体,包含校验字段(如CRC),唤醒后校验;NVS键值设计带版本号,便于升级迁移。
mcuku 阿沐 · 2026-08-27