ESP-IDF deep_sleep 和 FreeRTOS 任务

问题描述

我从事使用 FreeRTOS 任务的项目,我想进入 deep_sleep。在进入 deep_sleep 之前有什么我应该做的吗?或者唤醒后,RTOS 调度程序正常工作,什么也没有发生?

解决方法

没有简单的方法可以混合 freeRTOS 和 deep_sleep 模式。在深度睡眠期间,CPU 断电,其上下文丢失,但 RTC 内存可以保留。由于 SRAM 的所有内容都丢失了,因此我们无法在此轻松进行备份-恢复以在从深度睡眠中醒来后安全地恢复所有内容。

但是您可以做的是在进入深度睡眠之前将一切都降低到安全状态,您可以向所有任务发出信号以完成他们正在执行的操作并退出,然后利用 ESP32 相对较低的唤醒-延迟。对于连接 Wi-Fi 的设备来说,这是一个非常令人不快的不便,但对于会在几秒钟内唤醒并发送一次信标的 BLE 设备或多或少可以接受。

您还需要通过启用 CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP 选项来微调第二阶段引导加载程序的配置,以便从深度睡眠中唤醒比从冷重置中启动要快。