如何叫醒一个人深度睡眠碰他会醒吗的人

ESP32 支持在人深度睡眠碰他会醒吗时運行“人深度睡眠碰他会醒吗唤醒存根”芯片唤醒后立即运行此功能 - 在任何正常初始化,引导加载程序或 ESP-IDF 代码运行之前唤醒存根运行後,SoC 可以返回休眠状态或继续正常启动 ESP-IDF

人深度睡眠碰他会醒吗唤醒存根代码被加载到“RTC 快速存储器”中,它使用的任何数据也必须加载箌 RTC 存储器中RTC 存储区域在人深度睡眠碰他会醒吗期间保持其内容,

必须仔细编写唤醒存根代码:

  • 由于 SoC 刚刚从睡眠状态中醒来大多数外设都處于复位状态。SPI Flash 未映射
  • 唤醒存根代码只能调用 ROM 中或加载到 RTC 快速存储器中实现的功能(见下文)。
  • 唤醒存根代码只能访问 RTC 存储器中加载的数据所有其他 RAM 将无法使用并具有随机内容。唤醒存根可以使用其他 RAM 进行临时存储但是当 SoC 重新进入休眠状态或启动 ESP-IDF 时,内容将被覆盖。
  • RTC 内存必須包含存根使用的任何只读数据(.rodata)
  • 每当 SoC 重新启动时,RTC 存储器中的数据都会被初始化除非从人深度睡眠碰他会醒吗中唤醒。从人深度睡眠碰他会醒吗中醒来时保持睡眠前存在的值。
  • 唤醒存根代码是 esp-idf 应用程序的一部分在 esp-idf 的正常运行期间,函数可以调用唤醒存根函数或访问 RTC 存储器就好像这些是应用程序的常规部分。

esp-idf 中的唤醒存根的函数 esp_wake_deep_sleep()只要 SoC 从人深度睡眠碰他会醒吗中唤醒,该函数就会运行esp-idf 中提供了此函数的默认版本,但默认函数是弱链接的因此如果您的应用程序包含名为 esp_wake_deep_sleep() 的函数,那么这将覆盖这个默认版本

没有必要在您的应用程序中实现 esp_wake_deep_sleep() 以使用人深度睡眠碰他会醒吗。只有你想在唤醒时立即有特殊行为才有必要

如果要在运行时在不同的人深度睡眠碰他会醒吗存根之间进行交换,也可以通过调用 esp_set_deep_sleep_wake_stub() 函数来执行此操作如果仅使用默认的 esp_wake_deep_sleep() 函数,则不需要这样做

将代码加载到 RTC 内存中

唤醒存根代码必须駐留在 RTC 快速存储器中。这可以通过两种方式之一完成

第二种方法是将函数放入名称以 rtc_wake_stub 开头的任何源文件中。文件名 rtc_wake_stub * 中其内容将通过链接器自动放入 RTC 存储器中

对于非常简短的代码,或者对于要混合“普通”和 “RTC” 代码的源文件第一种方法更简单。当你想为 RTC 内存编写更长嘚代码时第二种方法更简单。

将数据加载到 RTC 内存中

存根代码使用的数据必须驻留在 RTC 慢速存储器中ULP 也使用该存储器。

可以通过以下两种方式之一来指定此数据:

快速存储器段中否则将转至 RTC 慢速存储器(默认选项)。此选项取决于 CONFIG_FREERTOS_UNICORE因为 RTC 快速存储器只能由 PRO_CPU 访问。

的数据进行訪问并且用户有责任确保它。

不幸的是以这种方式使用的任何字符串常量必须声明为数组并用 RTC_RODATA_ATTR 标记,如上例所示

第二种方法是将数據放入名称以 rtc_wake_stub 开头的任何源文件中。

如果您需要使用字符串或编写其他更复杂的代码第二种方法是更好的选择。

医学研究表明闹钟可提醒人们時间,但长期让闹钟来叫醒处于人深度睡眠碰他会醒吗的人会导致人的记忆认知功能减退,还会增加高血压和心脏病患病的风险从哲學角度看,这说明(  )

@DPerez好奇——除了配置位之外,您還有什么特别的设置DSWDT吗:我正在努力让DSWDT从人深度睡眠碰他会醒吗中唤醒PIC(在与此相同的论坛中张贴:“DSWDT和MPLLABX模拟器”抱歉还不能张贴链接)谢谢!

我要回帖

更多关于 人深度睡眠碰他会醒吗 的文章

 

随机推荐