在ESP32低功耗设计中,RTC内存(RTC_SLOW_MEM)与ULP协处理器协同保存关键数据的核心是:ULP负责在深度睡眠期间周期性唤醒并采样/处理数据,而RTC内存作为两者共享的持久化存储。正确姿势:1) 将关键变量声明为RTC_DATA_ATTR或RTC_NOINIT_ATTR,确保其在深度睡眠后保留;2) ULP程序通过RTC内存地址直接读写(如通过ulp_var宏定义),主CPU在进入睡眠前将上下文写入RTC内存,ULP唤醒后读取并更新;3) 使用ulp_set_wakeup_period设置ULP周期,并在ULP中实现数据校验(如CRC)防止RTC内存损坏;4) 主CPU唤醒后,从RTC内存恢复数据并同步到Flash(如NVS),避免频繁写Flash损耗寿命。实操建议:优先用RTC_NOINIT_ATTR保存无需初始化的数据,减少启动开销;ULP中避免复杂运算,仅做采样和标志位更新。
mcuku 阿沐 · 2026-08-27