> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RTSS 睡眠功能概述

每个内核使用专用的空闲计数器跟踪其空闲时长。该计数器在每个 FreeRTOS 滴答时递增。当计数器超过 30,000 个滴答时，该内核即具备进入睡眠的条件。

睡眠条件检查在 FreeRTOS 空闲钩子中执行：

* 主空闲钩子在主内核的空闲任务上运行。
* 被动空闲钩子在没有可执行任务时于从内核上运行。

两个钩子都会检查空闲计数器是否已达到睡眠阈值。如果达到阈值，控制权将转交给中央睡眠例程。唤醒后，空闲计数器重置为零。系统必须再保持空闲 30,000 个滴答，才能再次进入睡眠。

## **所有内核空闲要求**

除非系统中所有活动内核都处于空闲状态，否则内核 0 不会进入等待中断（WFI）状态。一个全局原子计数器用于跟踪已准备好进入睡眠的内核数量。在进入 WFI 之前，内核 0 会将该值与活动内核数量进行比较。如果任何活动内核仍在处理工作，内核 0 将退出睡眠进入序列，重置其空闲计数器，并等待下一次睡眠机会。

活动内核数量在调度器初始化期间根据 GPIO 启动配置引脚确定：

* 在锁步（lock-step）集群模式下，视为有三个活动内核。
* 在正常模式下，视为所有四个内核均处于活动状态。

此机制使睡眠同步能够自动适应当前的硬件配置。

## **唤醒序列**

**从内核唤醒**

当收到分配给相应内核的外设中断时，从内核（内核 1、内核 2 和内核 3）退出 WFI。示例包括来自 CAN、IPCC 和其他外设源的中断。

<Note>
  **注意**

  UART 中断注册在内核 0 上。因此，UART 活动无法将内核 1、内核 2 和内核 3 从睡眠状态唤醒。
</Note>

**内核 0 唤醒**

内核 0 的主要唤醒机制是 IPCC 中断。从内核被硬件中断唤醒后，会调用 `IPCC_Trigger`，通过 IPCC 通道通知内核 0。该通知会使内核 0 退出 WFI。

<Note>
  **注意**<br />因此，在 `freertos_init.h` 中禁用 SLEEP\_ENABLE 是一种安全的方法，可在调试和板级启动（bring-up）时完全绕过睡眠子系统，而无需删除任何代码
</Note>
