FreeRTOS学习:Tickless低功耗模式

低功耗模式简介

在一些特殊场景中,例如长期无人照看可穿戴设备等,都对设备的功耗有着很严格的要求。 

为了迎合这种特殊需求, 大多数 MCU 也都有相应的低功耗模式,以此来降低设备的整体功耗。

当然有了相应的低功耗硬件涉设计,软件层面的低功耗设计也得跟上, FreeRTOS 就提供了用于低功耗的 Tickless 机制。

STM32的低功耗模式有三种,睡眠模式停止模式待机模式,如下,

FreeRTOS主要使用的是睡眠模式,进入睡眠模式有两种方式,

  • WFI指令:_WFI
  • WFE指令:_WFE

任何中断或者事件都可以唤醒睡眠模式。 

Tickless模式详解 

Tickless低功耗模式的本质就是通过调用指令WFI实现睡眠模式。

在任务运行时,大部分时间其实都是在运行空闲任务(IDLE),如下,

于是为了降低功耗,又不影响运行,就可以让本该执行空闲任务的时间,让MCU进入相应的低功耗模式;当其他任务准备运行时,唤醒MCU退出睡眠模式。

但要完成上述操作,有以下难点

  • 进入低功耗后,下一个要运行的任务如何准确唤醒
  • 任何中断均可唤醒MCU,但是滴答定时器频繁中断会影响低功耗效果

 要解决以上两点,可以将滴答定时器的中断周期修改为低功耗运行时间,并且在退出低功耗后,补上系统节拍数,FreeRTOS的Tickless就是通过以上原理完成。

Tickless模式配置

  •  configUSE_TICKLESS_IDLE: 此宏用于使能低功耗 Tickless 模式,当此宏定义为 1 时,就是使能低功耗模式,如果配置为2,则需要我们自己去实现一些低功耗的操作。
  • configEXPECTED_IDLE_TIME_BEFORE_SLEEP:此宏用于定义系统进入相应低功耗模式的最短时长,默认是2,也就是进入低功耗的时间要大于两个时钟节拍。
     
  • configPRE_SLEEP_PROCESSING(x):此宏用于定义一些需要在系统进入相应低功耗模式前执行的事务,比如进入低功耗前关闭外设时钟,进一步降低功耗。该宏定义需要我们自己定义函数并在函数内部进行编写相关程序,比如关闭外设时钟的程序等。
     
  • configPOSR_SLEEP_PROCESSING(x):此宏用于定义一些需要在系统退出相应低功耗模式后执行的事务,例如开启之前关闭的外设时钟,保证整个程序的运行。
     

需要系统运行低功耗模式需满足以下三个条件,

总结就是,FreeRTOS的Tickless低功耗模式的本质就是让本该执行空闲任务的时间,让MCU进入相应的低功耗模式;当其他任务准备运行时,唤醒MCU退出睡眠模式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值