当前位置: 首页 > news >正文

功耗相关总结

文章目录

  • 功耗相关的使用场景
  • MCU中低功耗的应用
  • RTOS中低功耗应用

功耗相关的使用场景

目前越来越多的嵌入式设备采用电池进行供电,而不是跟台式电脑一样,可以一直连接着电源。在电池供电的场景下,对功耗的要求很高,工程师们尽量希望自己的设备充完一次点后可以使用更久。

本文从两个角度去看待如何实现低功耗。一种方法是MCU厂商提供的低功耗模式,在工程端,我们一般按照MCU厂商提供的方法使得MCU进入低功耗模式。另外一种方法是RTOS中的低功耗实现方法,因为RTOS是采用轮转调度的,可以在此基础上做相关处理,可以使设备使用的功耗更低。

MCU中低功耗的应用

以Cortex-M3内核为例,

通过查找CM3内核指南,可以看到这种内核提供了两种低功耗策略,如下图所示:
在这里插入图片描述

其实也很好理解,

  • 睡眠模式(Sleep Mode):
    在睡眠模式下,CPU停止执行指令,但所有的时钟信号(包括系统时钟和外设时钟)仍然保持活动状态。这意味着外设(如定时器、通信接口等)仍然可以工作,并且可以通过外设事件(如定时器溢出、串口数据到达等)来唤醒CPU。

  • 深度睡眠模式(Deep Sleep Mode):
    深度睡眠模式比睡眠模式更进一步降低功耗。在这个模式下,除了CPU停止执行指令外,大部分或全部的系统时钟和外设时钟也会被禁用。这意味着大多数外设也会停止工作。只有少数特定的唤醒源(如外部中断或者某些具有独立时钟的外设)才能唤醒处理器。

写一个表格对比一下:

特性睡眠模式深度睡眠模式
CPU停止执行指令停止执行指令
系统时钟保持活动大多数情况下禁用
外设时钟保持活动大多数情况下禁用
外设功能保持工作大多数情况下停止
唤醒事件外设事件限定的唤醒源
功耗更低

这是ARM内核层面提供的低功耗模式,但是在实际上厂商还可以客制化,这里举个例子,以STM32F1系列为例:
从STM32F1的参考手册可以见到:
在这里插入图片描述

其有三种模式,为啥三种呢,因为他扩展了CM3内核的深度睡眠模式,外加一个SRAM作为后备存储区,该区电力供应在进入深度睡眠模式的时候,可以选择被切断与保留,如果保留了,则可以当前的处理器状态备份到这个SRAM。(备份原理参考:https://blog.csdn.net/weixin_47702410/article/details/119751040)

总结一下,STM32F1的这三种模式与Cortex-M3内核的两种模式的关联如下:

  • 睡眠模式直接对应于Cortex-M3的睡眠模式。
  • 停止模式和待机模式可以看作是在Cortex-M3的深度睡眠模式的基础上,由STM32F1系列微控制器特有的扩展,它们提供了更深层次的功耗管理。

STM32F1的具体的休眠含义可以查找STM32F1的参考手册,如下:
在这里插入图片描述

RTOS中低功耗应用

RTOS在一般的应用中,处理器大量的时间都在处理空闲任务,此时可以考虑让处理器在空闲任务的时候进入低功耗模式。当需要处理应用层代码的时候就将处理器从低功耗模式唤醒。

因此关键在于如何确定CPU此时是空闲的,我们在空闲的时候开启低功耗而需要处理任务的时候,退出低功耗便可。

以FreeRTOS为例,一般会在空闲任务都会进入到钩子函数,则可钩子函数中执行低功耗相关处理。而FreeRTOS的系统时钟是由滴答定时器中断来提供的。

为此,FreeRTOS特地提供了一个解决方法–Tickless模式,当处理器进入空闲任务以后就关闭系统节拍中断(滴答定时器中断),只有当其他中断发生或者其他任务需要处理的时候处理器才会被低功耗模式中唤醒。

关于这方面的具体实现,可以在源码中查看如下宏的实现:

#define configUSE_TICKLESS_IDLE 1 //启用低功耗tickless模式

参考:https://blog.csdn.net/qq_26226375/article/details/125043059

总体来说,RTOS实现低功耗可运用如下的原理(滴答定时器作了处理,不然会一直唤醒内核),红色部分是任务处理时长,灰色部分是低功耗休眠时长,绿色部分是进入低功耗的处理时长:

在这里插入图片描述

http://www.lryc.cn/news/351234.html

相关文章:

  • 17款奔驰GLS450升级头等舱行政独立四座马鞍是什么样体验
  • 浏览器的下载行为基本原理
  • 浅谈微服务的自动化部署
  • 【C语言】8.C语言操作符详解(1)
  • Buzz库网络爬虫实例:快速爬取百度搜索实时热点
  • SQL注入:pikachu靶场中的SQL注入通关
  • springsecurity入门登录授权
  • 医学科技查新中对查新点的撰写方法!附案例讲解!
  • 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版
  • 回溯算法05(leetcode491/46/47)
  • Transformer,革命性的深度学习架构
  • 实验五:实现循环双链表各种基本运算的算法
  • ElasticSearch IK分词器的安装、词典扩展与停用
  • 代码随想录训练营总结
  • 深度学习-转置卷积
  • Unity性能优化工具介绍
  • Math之向上向下取整
  • MPP架构
  • These relative modules were not found:* ../../../constant in
  • 2024最新彩虹聚合DNS管理系统源码v1.3 全开源
  • 在Go语言中如何实现变参函数和函数选项模式
  • Spring Boot中的 6 种API请求参数读取方式
  • Linux基础命令[27]-gpasswd
  • 机会约束转化为确定性约束-- 样本均值法
  • uniapp中,当页面显示时触发子组件的重新渲染
  • 先进制造aps专题五 aps软件的排程算法和优化算法介绍
  • 【跳坑日记】暴力解决Ubuntu SSH报错: Failed to start OpenBSD Secure Shell server
  • 从需求角度介绍PasteSpider(K8S平替部署工具适合于任何开发语言)
  • 线性三角化
  • Golang os.Rename invalid cross-device link的原因