ESP-IDF deep_sleep 和 FreeRTOS 任务
ESP-IDF deep_sleep and FreeRTOS tasks
我在使用 FreeRTOS 任务的项目上工作,我想进入 deep_sleep。在进入 deep_sleep 之前我应该做些什么?或者唤醒后,RTOS scheduler 什么都没发生?
没有简单的方法来混合 freeRTOS 和 deep_sleep 模式。在深度睡眠期间,CPU 断电并且其上下文丢失,但可以保留 RTC 内存。由于所有 SRAM 的内容都丢失了,我们无法在此处进行简单的备份恢复以在从深度睡眠中安全恢复所有内容。
但是你能做的是在进入深度睡眠之前把一切都降到安全状态,你可以给你所有的任务发出信号来完成他们正在做的事情并退出,然后利用 ESP32 相对较低的一些优势唤醒延迟。对于 Wi-Fi 连接的设备来说,这是一个非常不愉快的不便,但对于 BLE 设备来说或多或少是可以接受的,它会在几秒钟内唤醒并发送一次信标。
您还想通过启用 CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP 选项来微调第二阶段引导加载程序的配置,这样从深度睡眠中唤醒比从冷复位中启动更快。
我在使用 FreeRTOS 任务的项目上工作,我想进入 deep_sleep。在进入 deep_sleep 之前我应该做些什么?或者唤醒后,RTOS scheduler 什么都没发生?
没有简单的方法来混合 freeRTOS 和 deep_sleep 模式。在深度睡眠期间,CPU 断电并且其上下文丢失,但可以保留 RTC 内存。由于所有 SRAM 的内容都丢失了,我们无法在此处进行简单的备份恢复以在从深度睡眠中安全恢复所有内容。
但是你能做的是在进入深度睡眠之前把一切都降到安全状态,你可以给你所有的任务发出信号来完成他们正在做的事情并退出,然后利用 ESP32 相对较低的一些优势唤醒延迟。对于 Wi-Fi 连接的设备来说,这是一个非常不愉快的不便,但对于 BLE 设备来说或多或少是可以接受的,它会在几秒钟内唤醒并发送一次信标。
您还想通过启用 CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP 选项来微调第二阶段引导加载程序的配置,这样从深度睡眠中唤醒比从冷复位中启动更快。