Page 1 of 1

为什么模组在退出deep_sleep时会重启

Posted: Thu Jan 12, 2023 6:02 am
by gezhia
从例程中摘抄出来的代码
Snipaste_2023-01-12_13-59-25.png
Snipaste_2023-01-12_13-59-25.png (42.07 KiB) Viewed 4402 times
运行后输出
Snipaste_2023-01-12_14-00-40.png
Snipaste_2023-01-12_14-00-40.png (26.96 KiB) Viewed 4402 times
发现esp_deep_sleep_start();之后的代码并未被执行,直接重启了,请问是什么原因?

Re: 为什么模组在退出deep_sleep时会重启

Posted: Thu Jan 12, 2023 7:53 am
by ESP_@In逍遥子
deep sleep 唤醒后相当于重新启动,这是符合预期的。示例说明文档:examples/system/deep_sleep/README.md

Re: 为什么模组在退出deep_sleep时会重启

Posted: Thu Jan 12, 2023 8:02 am
by ESP_ZB2
我们的deep_sleep(深度睡眠)一般是放在最后启动,唤醒源唤醒之后是重新启动,程序重新执行,所以esp_deep_sleep_start();之后的代码永远执行不到的。
如果想要从当前睡眠位置唤醒,可以参考example的light_sleep示例,这个为轻度睡眠模式。

Re: 为什么模组在退出deep_sleep时会重启

Posted: Thu Jan 12, 2023 8:40 am
by gezhia
谢谢解答支持!
如果deep_sleep模式唤醒是触发重启esp_sleep_get_wakeup_cause()就不适用了,这跟文档说明不一致呢。


esp_sleep_wakeup_cause_t esp_sleep_get_wakeup_cause(void)
Get the wakeup source which caused wakeup from sleep.

返回
cause of wake up from last sleep (deep sleep or light sleep)

Re: 为什么模组在退出deep_sleep时会重启

Posted: Thu Jan 12, 2023 1:07 pm
by ESP_ZB2
你可以去跑一下我们的example里面的deep_sleep示例。我们的esp_sleep_get_wakeup_cause();API是放在esp_deep_sleep_start()睡眠之前的。开启深度睡眠之后,当有唤醒源唤醒之后,程序重新运行,然后通过esp_sleep_get_wakeup_cause()获得唤醒源,然后打印出来的。
如果你放在esp_deep_sleep_start()深度睡眠之后,后面的程序是不会跑到的。