干货 | 关于Armv7mWFE 和 WFI 使用的经验分享

一、 概述

本章主要简述 WFE 和 WFI 使用。(这里主要参考 armv7m)。这两者都可以是的 CPU 暂停执行,但又有区别。

二、WFE

        对于 WFE,即是 Wait For Event。WFE 和 SEV 支持基于软件的系统事件同步。WFE 可以:

(1)使用WFE指令表明它能够挂起进程或线程的执行,直到事件发生才解除挂起,从而允许硬件进入低功耗状态。

(2)依赖于对软件透明的机制,并提供低延迟唤醒。

WFE 机制取决于以下因素的相互作用:

(1)WFE 唤醒事件

(2)事件寄存器

(3)SEV指令

(4)WFE 指令

2.1 WFE 唤醒事件

(1)在多处理器系统中的任何处理器上执行 SEV 指令。(该指令将一个事件发送给多处理器系统中所有 CPU)

(2)如果置位了SCR->SEVONPEND,则从 Inactive 进入Pending状态的任何异常都可唤醒。

(3)具有比当前活动异常更高优先级的异步异常,它抢占任何当前活动的异常。

(4)启用调试的调试事件。

(5)复位。

2.2 事件寄存器

事件寄存器是多处理器系统中每个处理器的单比特寄存器。当设置事件寄存器时,事件寄存器表明事件已经发生。以下条件适用于事件寄存器:

(1)复位清除事件寄存器。

(2)任何WFE唤醒事件,或者异常返回指令的执行,都会设置事件寄存器。

(3)WFE指令清除事件寄存器。

(4)软件不能直接读取或写入事件寄存器的值

2.3 SEV 指令

在一个多处理器系统中,将一个唤醒事件发送给所有CPU。用于向处理器发送事件信号的机制是IMPLEMENTATION DEFINED。

2.4 WFE 指令

等待事件指令的动作,取决于事件寄存器的状态:

(1)如果设置了事件寄存器,则该指令清除寄存器并立即返回。

(2)如果事件寄存器清除,处理器可以暂停执行并进入低功耗状态。它可以保持这种状态,直到处理器检测到WFE唤醒事件或复位。当处理器检测到WFE唤醒事件时,则WFE指令完成。

WFE唤醒事件可以在发出WFE指令之前发生。使用Wait For Event机制的软件必须能够容忍虚假的唤醒事件,包括多次唤醒。

WFE是一个提示指令。如果Event Register是清空的,它将在与快速唤醒一致的最低功率状态下暂停执行,而不需要软件恢复,直到发生复位、异常或其他事件。

三、WFI

对于 WFI,即是 Wait For Interrput,其支持等待中断。在 CPU 发出 WFI 指令时,CPU 可以暂停执行并进入低功耗状态。

3.1 WFI 唤醒事件

        WFI 的唤醒事件如下:

(1)复位

(2)一种具有优先级的异步异常,如果PRIMASK设置为0,将抢占任何当前活动的异常。(处理器在确定异步异常是否为WFI唤醒事件时忽略PRIMASK的值。)

(3)如果启用了debug,则显示一个调试事件。

(4)一个实现定义的WFI唤醒事件。

这里例如:异常优先级规则意味着,如果处理器以NMI优先级执行WFI指令,则强制该指令完成的唯一保证方法是复位或调试状态进入。

        当检测到唤醒事件,WFI指令完成,CPU 有两种做法:

(1)如果考虑到PRIMASK的值,存在一个具有足够优先级来抢占执行的挂起异常。

(2)在执行WEI指令后立即从指令恢复执行。

3.2 WFI 进入低功耗

WFI 指令通常:

(1)强制暂停执行和所有相关总线活动。

(2)停止执行来自处理器的指令。

执行此操作所需的控制逻辑通常跟踪处理器总线接口的活动。这意味着它可以向外部电源控制器发出信号,表明没有正在进行的总线活动。

需要注意的是:

(1)目前体系里面将WFI定义为处理器可以忽略的nop兼容提示。

(2)处理器可以虚假地退出低功耗状态,或者由于调试,或者由于一些实现定义的原因。等待中断的一些实现在增加了时钟可以停止的区域,从而增加了省电。

四、参考文档

ARM:《DDI0403E_d_armv7m_arm.pdf》

欢迎登录大大通,了解更多精彩技术内容~

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值