FreeRTOS低功耗原理实现

1.当idle任务运行时(空闲任务),进入低功耗模式

2.在适当条件下,通过中断或者外部事件唤醒MCU 

每当 OS 系统定时器产生中断,会将MCU从低功耗唤醒,频繁进入低功耗模式或是从低功耗模式唤醒会使得MCU无法进入深度睡眠,

在FreeRTOS中,设计出一种低功耗模式,Tickless Idle Mode ,这个会让MCU更长时间进入低功耗模式。

此图是任务调度,横轴为时间轴,T1,T2,T3,T4,为RTOS时间片基准。

A,B,D 为周期性任务

C 为突发性任务

Idle1: Idle 任务运行期间,会产生一次系统时钟滴答,此时会唤醒 MCU ,唤醒后 MCU 又会进入低功 耗模式,这次唤醒是无意义的。期望使 MCU Idle1 期间一直处于低功耗模式,因此适当调整系统定时器中断使得 T1 时不触发系统时钟中断,中断触发点设置为 Task B 到来时;
Idle2 Task C 在系统滴答到达前唤醒 MCU (外部事件), MCU 可以在 Idle2 中可以一直处于低功耗 模式;
Idle3: Idle2 情况相同,但 Idle3 时间很短,如果这个时间很短,那么进入低功耗模式的意义并不大, 因此在进入低功耗模式时软件应该添加策略
Idle4: Idle1 情况相同。
Tickless Idle Mode 的设计思想在于尽可能得在 MCU 空闲时使其进入低功耗模式。从上述情景中可以 看出软件设计需要解决的问题有:
a. 合理的进入低功耗模式(避免频繁使 MCU 在低功耗模式和运行模式下进行不必要的切换) ;
RTOS 的系统时钟源于硬件的某个周期性定时器( Cortex-M 系列内核多数采用 SysTick ),
RTOS 的任务调度器可以预期到下一个周期性任务(或者定时器任务)的触发时间,如上文所 述,调整系统时钟定时器中断触发时间,可以避免 RTOS 进入不必要的时间中断,从而更长的 时间停留在低功耗模式中,此时 RTOS 的时钟不再是周期的而是动态的(在原有的时钟基准时 将不再产生中断,即 Tickless );
b. MCU 被唤醒时,通过某种方式提供为系统时钟提供补偿。
MCU 可能被两种情况所唤醒,动态调整过的系统时钟中断或者突发性的外部事件,无论是哪一
种情况,都可以通过运行在低功耗模式下的某种定时器来计算出 MCU 处于低功耗模式下的时
间,在 MCU 唤醒后对系统时间进行软件补偿;
c. 软件实现时,要根据具体的应用情景和 MCU 低功耗特性来处理问题。 尤其是 MCU 的低功耗特性,不同 MCU 处于不同的低功耗模式下所能使用的外设(主要是定时 器)是不同的,RTOS 的系统时钟可以进行适当的调整。
STM32 家族中拥有不同的系列,特别是专为低功耗应用设计的 L 系列,为其设计 RTOS 低功耗特性实 现时可以有更多的实现方式(例,某种模式下内核停止运行,此时可以使用外部定时器或者 RTC 来代 替 Systick 作为系统定时器)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值