在ESP32低功耗模式下(如Deep-sleep),RTC内存(RTC_SLOW_MEM)用于保留数据,但并非所有变量类型都能安全保留。关键点:只有静态分配的、位于RTC快速或慢速内存段中的变量(如通过RTC_DATA_ATTR或RTC_NOINIT_ATTR修饰的全局/静态变量)才能在复位后保留。普通局部变量、堆上动态分配的内存(malloc/new)、以及未显式指定RTC属性的全局变量,都会在复位后丢失。此外,指针本身若指向非RTC内存(如DRAM),即使指针变量在RTC段,其指向的数据也会丢失。实操建议:使用RTC_DATA_ATTR声明需要保留的变量,并避免在RTC段存储复杂对象(如含虚函数的类实例),因其构造函数不会在复位后自动执行;优先使用POD类型或固定大小数组。对于字符串,需确保字符数组本身也在RTC段。
mcuku 阿沐 · 2026-08-27