【问题标题】:ESP-IDF deep_sleep and FreeRTOS tasksESP-IDF deep_sleep 和 FreeRTOS 任务
【发布时间】:2023-03-03 15:44:02
【问题描述】:

我从事使用 FreeRTOS 任务的项目,我想进入 deep_sleep。在进入 deep_sleep 之前我应该​​做些什么?或者唤醒后,RTOS 调度器什么也没发生?

【问题讨论】:

  • 当您进入深度睡眠时,您的应用程序和 RTOS 会死机,因为大部分 RAM 与 CPU 一起断电。您可以使用 RTC 内存或闪存来保存一些关键数据,以便在唤醒时恢复应用状态。

标签: esp32 freertos rtos esp-idf arduino-esp32


【解决方案1】:

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

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

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

【讨论】: