电源管理模型分析

更新时间:
2024-03-14
下载文档

电源管理模型分析

电源管理

SylixOS 电源管理分为两大部分:CPU 功耗管理和外设功耗管理。

CPU 功耗管理分为三种模式:

  1. 正常运行模式(Running):CPU 正常执行指令。
  2. 省电模式(PowerSaving):所有具有电源管理功能的设备进入省电模式,同时 CPU 主频降低,多核 CPU 仅保留一个 CPU 运行。
  3. 休眠模式(Sleep):系统休眠,所有具有电源管理功能的设备进入 Suspend 状态,系统如果需要通过指定事件唤醒休眠,则从复位向量处恢复,此时需要 BootLoader 或者 BIOS 程序的配合。

在 SMP(对称多处理器)中,通过动态调整运行的CPU核的个数来实现 CPU 核的功耗管理。根据系统的负荷,关闭“多余的 CPU”,在满足用户需求的前提下,尽可能的降低 CPU 的功耗。

外设功耗管理分为四个状态: 4. 正常运行状态:设备被打开,并使能相应设备的电源和时钟,设备开始工作。 5. 设备关闭状态:设备被关闭,驱动程序请求电源管理适配器断开设备电源与时钟,设备停止工作。 6. 省电模式状态:系统进入省电模式,并请求外设进入省电模式。 7. 设备空闲状态:设备的功耗管理单元具有看门狗功能,一旦设备空闲,且空闲时间超过设置,系统会将设备变为空闲状态。

如下图所示是 SylixOS 中电源管理基本结构图。

一个电源管理适配器(PM Adapter)可以管理多个设备,不同设备由相应的通道号区分,电源管理适配器管理的通道号总数决定了电源管理适配器可以管理的设备数。

电源管理适配器控制其管理设备的上电(连通设备电源与时钟)和掉电(断开设备电源与时钟)操作。同时,每个支持电源管理的设备也提供一套方法集,可通过调用系统提供的应用层接口,实现设备的各种工作状态的改变。从而实现应用程序对设备进行多种电源操作,比如进入休眠模式、进入省电模式、恢复正常模式等。如下表所示是应用程序可以切换的六种工作状态。

工作状态描述
Suspend使所有支持休眠功能的外设进入休眠状态。
Resume使所有支持休眠功能的外设从休眠状态恢复正常状态。
SavingEnter使系统进入省电模式。控制所有支持电源管理的设备进入省电模式,同时设置运行的 CPU 核数目以及能耗级别。
SavingExit控制系统退出省电模式。控制所有支持电源管理的设备退出省电模式,同时设置运行的 CPU 核数目以及能耗级别。
IdleEnter设备功耗管理单元具有看门狗功能,一旦设备空闲且空闲时间超过设置,系统会将设备变为空闲状态。
IdleExit系统将使设备退出空闲模式,恢复为正常状态。

电源管理 API

系统提供电源管理函数,用户使用对应函数可以实现电源管理功能。函数分析如下:

系统休眠

系统提供函数 API_PowerMSuspend 控制所有支持休眠功能的外设进入休眠状态,函数原型如下:

#include <SylixOS.h>
VOID  API_PowerMSuspend (VOID);

函数 API_PowerMSuspend 原型分析:

函数 API_PowerMSuspend 首先遍历电源管理设备链表,对所有支持休眠功能的外设进行休眠操作,然后调用函数 API_KernelSuspend 使内核进入休眠状态。

系统唤醒

系统提供函数 API_PowerMResume 控制所有支持休眠功能的外设从休眠状态恢复正常状态,函数原型如下:

#include <SylixOS.h>
VOID  API_PowerMResume (VOID);

函数 API_PowerMResume 原型分析:

函数 API_PowerMResume 首先遍历电源管理设备链表,对所有支持休眠唤醒功能的外设进行唤醒操作,然后调用 API_KernelResume 使内核从休眠状态唤醒。

设置 CPU 节能参数

系统提供函数 API_PowerMCpuSet 设置多核系统中运行的 CPU 核数目以及设置 CPU 能耗级别。函数原型如下:

#include <SylixOS.h>
VOID  API_PowerMCpuSet (ULONG  ulNCpus, UINT  uiPowerLevel);

函数 API_PowerMCpuSet 原型分析:

  • 参数 ulNCpus 是运行态的 CPU 核个数。
  • 参数 uiPowerLevel 是CPU能耗级别。

函数 API_PowerMCpuSet 根据参数 ulNCpus 获取用户设置的系统运行CPU核数,如果传入参数 ulNCpus 小于当前系统正在运行的 CPU 核数,则关闭一些 CPU 核;如果传入参数 ulNCpus 大于当前系统运行 CPU 核数,则打开一些 CPU 核。根据传入参数 uiPowerLevel 设置 CPU 能耗级别,不同的能耗级别,CPU 以不同的主频运行。同时函数 API_PowerMCpuSet 还会遍历电源管理设备链表,将 CPU 节能参数通知所有支持电源管理的外设。

获取 CPU 节能参数

系统提供函数 API_PowerMCpuGet 获得当前运行的 CPU 个数和 CPU 能耗级别,函数原型如下:

#include <SylixOS.h>
VOID  API_PowerMCpuGet (ULONG  *pulNCpus, UINT  *puiPowerLevel);

函数 API_PowerMCpuGet 原型分析:

  • 参数 ulNCpus 返回运行态的 CPU 核个数。
  • 参数 puiPowerLevel 返回 CPU 能耗级别。

注意
如果 ulNCpuspuiPowerLevelNULL ,则该函数不做处理。

系统进入省电模式

系统提供函数 API_PowerMSavingEnter 使系统进入省电模式。函数原型如下:

#include <SylixOS.h>
VOID  API_PowerMSavingEnter (ULONG  ulNCpus, UINT  uiPowerLevel);

函数 API_PowerMSavingEnter 原型分析:

  • 参数 ulNCpus 是运行态的 CPU 核个数。
  • 参数 uiPowerLevel 是CPU能耗级别。

函数 API_PowerMSavingEnter 通知支持电源管理的设备进入省电模式,同时调用函数 API_PowerMCpuSet 设置运行的CPU数目以及 CPU 能耗级别。

系统退出省电模式

系统提供函数 API_PowerMSavingEnter 控制系统退出省电模式。函数原型如下:

#include <SylixOS.h>
VOID  API_PowerMSavingExit (ULONG  ulNCpus, UINT  uiPowerLevel);

函数 API_PowerMSavingExit 原型分析:

  • 参数 ulNCpus 是运行态的 CPU 核个数。
  • 参数 uiPowerLevel 是CPU能耗级别。

函数 API_PowerMSavingExit 通知所有支持电源管理的设备退出省电模式,同时调用函数 API_PowerMCpuSet 设置运行的CPU数目以及 CPU 能耗级别。

文档内容是否对您有所帮助?
有帮助
没帮助