0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS如何降低功耗

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-30 11:18 次阅读

1、如何降低功耗?

一般的简单应用中处理器大量的时间都在处理空闲任务,所以我们就可以考虑当处理器处理空闲任务的时候就进入低功耗模式,当需要处理应用层代码的时候就将处理器从低功耗模式唤醒。FreeRTOS 就是通过在处理器处理空闲任务的时候将处理器设置为低功耗模式来降低能耗。一般会在空闲任务的钩子函数中执行低功耗相关处理,比如设置处理器进入低功耗模式、关闭其他外设时钟、降低系统主频等等。

我们知道 FreeRTOS 的系统时钟是由滴答定时器中断来提供的,系统时钟频率越高,那么滴答定时器中断频率也就越高。以前讲过,中断是可以将 STM32F103 从睡眠模式中唤醒,周期性的滴答定时器中断就会导致 STM32F103 周期性的进入和退出睡眠模式。因此,如果滴答定时器中断频率太高的话会导致大量的能量和时间消耗在进出睡眠模式中,这样导致的结果就是低功耗模式的作用被大大的削弱。

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

问题一:关闭系统节拍中断会导致系统节拍计数器停止,系统时钟就会停止。

FreeRTOS 的系统时钟是依赖于系统节拍中断(滴答定时器中断)的,如果关闭了系统节拍中断的话就会导致系统时钟停止运行,这是绝对不允许的!该如何解决这个问题呢?我们可以记录下系统节拍中断的关闭时间,当系统节拍中断再次开启运行的时候补上这段时间就行了。这时候我们就需要另外一个定时器来记录这段该补上的时间,如果使用专用的低功耗处理器的话基本上都会有一个低功耗定时器,比如 STM32L4 系列(L 系列是 ST 的低功耗处理器)就有一个叫做 LPTIM(低功耗定时器)的定时器。STM32F103 没有这种定时器那么就接着使用滴答定时器来完成这个功能,具体实现方法后面会讲解。

问题二:如何保证下一个要运行的任务能被准确的唤醒?

即使处理器进入了低功耗模式,但是我的中断和应用层任务也要保证及时的响应和处理。中断自然不用说,本身就可以将处理器从低功耗模式中唤醒。但是应用层任务就不行了,它无法将处理器从低功耗模式唤醒,无法唤醒就无法运行!这个问题看来很棘手,既然应用层任务无法将处理器从低功耗模式唤醒,那么我们就借助其他的力量来完成这个功能。如果处理器在进入低功耗模式之前能够获取到还有多长时间运行下一个任务那么问题就迎刃而解了,我们只需要开一个定时器,定时器的定时周期设置为这个时间值就行了,定时时间到了以后产生定时中断,处理器不就从低功耗模式唤醒了。这里似乎又引出了一个新的问题,那就是如何知道还有多长时间执行下一个任务?这个时间也就是低功耗模式的执行时间,值得庆辛的是 FreeRTOS已经帮我们完成了这个工作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19155

    浏览量

    229049
  • 嵌入式
    +关注

    关注

    5068

    文章

    19008

    浏览量

    302982
  • FreeRTOS
    +关注

    关注

    12

    文章

    483

    浏览量

    61991
收藏 人收藏

    评论

    相关推荐

    降低电路漏电功耗低功耗设计方法

    概念: Power/Ground Gating是集成电路中通过关掉那些不使用的模块的电源或者地来降低电路漏电功耗低功耗设计方法。该方法能降低电路在空闲状态下的静态
    的头像 发表于 09-16 16:04 1.1w次阅读
    <b class='flag-5'>降低</b>电路漏电<b class='flag-5'>功耗</b>的<b class='flag-5'>低功耗</b>设计方法

    cogobuy降低功耗的措施

    cogobuy降低功耗的措施  每个厂商对于降低功耗都有不同的处理方式。虽然每个MCU都有休眠状态或都有可能实现很低的工作耗电量,但是有的芯片在处于很低功耗的时候,基本功能也所剩无几了,没有
    发表于 03-23 11:18

    第30章 FreeRTOS低功耗之睡眠模式

    STM32F4xx睡眠模式介绍30.3 低功耗模式的调试支持30.4 如何有效降低睡眠模式下的功耗30.5总结30.1STM32F103睡眠模式介绍说明:在FreeRTOS系统上面实
    发表于 09-12 17:21

    第31章 FreeRTOS低功耗之停机模式

    低功耗是MCU的一项重要的指标,本章节为大家讲解STM32F103,STM32F407和STM32F429的低功耗方式之停机模式在FreeRTOS操作系统上面的实现方法。本章教程配套的例子含
    发表于 09-13 20:17

    第33章 FreeRTOS低功耗之tickless模式

    转本章节为大家讲解FreeRTOS本身支持的低功耗模式tickless实现方法,tickless低功耗机制是当前小型RTOS所采用的通用低功耗方法,比如embOS,RTX和uCOS-I
    发表于 09-17 20:43

    RTOS低功耗设计原理及实现_TicklessMode(FreeRTOS的实现)

    ,每次当 OS 系统定时器产生中断时,也会将 MCU 从低功耗模式中唤醒,而频繁的进入低功耗模式/从低功耗模式中唤醒会使得 MCU 无法进入深度睡眠,对低功耗设计而言也是不合理的。在
    发表于 11-10 09:54

    请问stm32不进入低功耗模式怎么降低功耗

    stm32进入低功耗模式,必须用中断来唤醒,现在就是不用这种模式,如何通过程序来降低功耗
    发表于 05-06 18:43

    如何降低ZC发现网络的频次以降低功耗

    ZED 和ZC,在组网正常的情况下,ZED可以进入低功耗模式,电流在uA级别。CC2530芯片当关闭ZC后,ZED会持续的进行网络发现,无法进入低功耗模式。电流达28mA;求教TI工程师,如何降低ZC发现网络的频次以
    发表于 08-07 07:03

    AT32 FreeRTOS基础例程(包含低功耗功能)

    说明:AT32 FreeRTOS基础例程(包含低功耗功能),见附件。器件:AT32F403A工程环境:IAR V8另有更详细的基于Keil MDK的FreeRTOS例程和FreeRTOS
    发表于 03-22 18:57

    请问如何利用FPGA设计技术降低功耗

    如何利用FPGA设计技术降低功耗
    发表于 04-13 06:16

    关于FreeRTOS低功耗的问题

    笔者的团队专业从事环境监测设备的开发,在开发过程中团队的工作人员提到了关于FreeRTOS低功耗的问题。RTOS低功耗与裸机跑的进入的方式不同。普通单片机进入的方式分为SLEEP、STOP
    发表于 02-23 06:25

    探究STM32、FreeRTOS低功耗设计思路和原理

    本文为大家讲讲基于 STM32 、 FreeRTOS 实现低功耗思想和原理
    的头像 发表于 05-07 17:20 3207次阅读
    探究STM32、<b class='flag-5'>FreeRTOS</b><b class='flag-5'>低功耗</b>设计思路和原理

    STM32与FreeRTOS实现低功耗

    记录在开发过程中,遇到这样一个产品,它基于 Cortex-M7 内核的 STM32F769 芯片,同时使用了 FreeRTOS 实时操作系统。由于该产品使用电池供电,因此有着低功耗的需求。接下来
    发表于 12-07 20:06 19次下载
    STM32与<b class='flag-5'>FreeRTOS</b>实现<b class='flag-5'>低功耗</b>

    STM32L4 运行FreeRTOS之STOP2低功耗模式

    最近做一个物联网的项目,由于功能比较多,为了简化程序逻辑,所以使用了FreeRTOS操作系统,MCU为STM32L431。FreeRTOS的源码只实现了sleep级别低功耗模式(需要定义
    发表于 12-07 20:21 22次下载
    STM32L4 运行<b class='flag-5'>FreeRTOS</b>之STOP2<b class='flag-5'>低功耗</b>模式

    在模拟电源设计中降低功耗

    Nano,Nano:在模拟电源设计中降低功耗
    的头像 发表于 01-05 09:43 692次阅读