背景

今天阅读Nordic SDK里的example时发现里面功耗管理使用的power_manage()函数主要就是调用了一个__WFE()函数。查阅资料了解到WFE是一条汇编指令,它可以让CPU内核进入idle模式,与其相应的还有另外一条汇编指令WFI。

/**@brief   Sleep until an event is received. */
static void power_manage(void)
{
#ifdef SOFTDEVICE_PRESENT
(void) sd_app_evt_wait();
#else
__WFE();
#endif
}

WFI与WFE

WFI和WFE都是cortex内核进入低功耗模式的指令,WFI指的是wait for interrupt,WFE指的是wait for event。从字面上理解,WFI是等待中断,WFE是等待事件。等待中断很好明白,中断是嵌入式编程常用的硬件机制,大家都很熟。但是等待事件到底是等待什么,事件和中断一样吗?那肯定是不一样的,不然就不会区分WFI和WFE了。

二者区别:

WFE

WFE实际上是受控于一个1bit event register。当CPU执行WFE指令时,如果event register没有被置位(0),则当前CPU就会进入低功耗模式;如果event register被置位(1)了,则会将事件寄存器对应当前CPU的位复位(0),然后返回继续执行接下来的指令,不会进入低功耗模式。

WFE进入低功耗模式后的唤醒条件:

  • 发生了未被屏蔽的IRQ中断
  • 发生了未被屏蔽的FIQ中断
  • CPU对应的event register被置位(1)。如果通过这种方式唤醒,CPU会在唤醒后立即将event register复位(0)

WFI

WFI指令执行后CPU立即进入低功耗状态。

WFI进入低功耗模式后的唤醒条件:

  • 发生了未被屏蔽的IRQ中断
  • 发生了未被屏蔽的FIQ中断

最新文章

  1. 运行错误:error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or
  2. oracle--知识点汇总2---laobai
  3. Mybatis Generator生成工具配置文件详解
  4. 计算bean的和(java)
  5. java线程池初步理解
  6. 让计算机崩溃的python代码,求共同分析
  7. 【转载】Linux系统,设置Oracle开机启动,待整理
  8. jQuery中ajax调用当前页面方法
  9. JavaPersistenceWithHibernate第二版笔记Getting started with ORM-002Domain层详解及M etaModel
  10. [DLL] Dynamic link library (dll) 的编写和使用教程
  11. qt实现头像上传功能(写了4个类,朝十晚八的博客,非常好)
  12. [2017-07-18]ELK安装笔记
  13. C++——函数的调用
  14. H5_ 表单及其他新增和改良元素
  15. go的net/rpc用法
  16. python测试开发django-46.xadmin添加action动作
  17. python基础之循环语句,格式化输出以及编码
  18. pyhton字符串
  19. 【未通过】LintCode #366 斐波纳契数列
  20. sublime text怎样安装ctags来定位函数

热门文章

  1. js 动态给table添加、删除行。
  2. 输入流导致javax.crypto.BadPaddingException
  3. List<Object>转为对象
  4. abap screen表格控件后续增加栏位
  5. EasyUI异步Tree默认请求id获取不到问题
  6. struts2 显示表格
  7. Websocket(websocket自定义协议)
  8. 【C学习随笔】day1-4 写一篇博客
  9. requests断点续传功能
  10. Java方法之方法的重载