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

FreeRTOS-Tickless低功耗模式 | FreeRTOS十四

目录

说明:

一、低功耗模式简介

1.1、STM32低功耗模式

二、Tickless模式

2.1、Tickless模式如何功耗

2.2、Tickless模式设计思想

2.3、为了降低功耗,又不影响系统运行,怎么能做到呢?

三、Tickless模式修改配置

3.1、配置相关的宏定义

四、使用Tickless低功耗模式

4.1、使用步骤


说明:

关于内容:

        1)以下内容多为概念了解与步骤分析

        2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码

        3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试

关于其它:

        1)操作系统:win 10

        2)平台:keil 5 mdk

        3)语言:c语言

        4)板子:STM32系列移植FreeRTOS

一、低功耗模式简介

        很多应用场合对于功耗的要求很严格,如可穿戴的手表、物理网低功耗产品等;一般的MCU都有相应的低功耗模式,裸机开发时可以使用MCU的低功耗模式。

        FreeRTOS也提供了一个叫Tickless的低功耗模式,方便带FreeRTOS操作系统的应用开发。

 1.1、STM32低功耗模式

如下图1:

       图1

        主要使用睡眠模式,进入睡眠模式WFI指令:_WFI,WFE指令:_WFE;退出休眠模式,任何中断或事件都可以唤醒睡眠模式;

 

二、Tickless模式

2.1、Tickless模式如何功耗

        本质是通过调用指令WIF实现睡眠模式。在执行空闲任务时,进入睡眠模式。

2.2、Tickless模式设计思想

        在任务运行时间统计实验中,可以看出整个系统在运行过程中,大部分时间是在运行空闲任务,如下图2:

图2

2.3、为了降低功耗,又不影响系统运行,怎么能做到呢?

        在空闲任务执行期间,让MCU进入相应的低功耗模式;当其他任务准备运行的时候,唤醒MCU退出低功耗模式。

难点:

        1)进入低功耗之后,多久唤醒?在下一个任务执行前,如何准确唤醒MCU?

        2)任何中断都可以唤醒MCU,滴答定时器频繁中断会影响低功耗的效果(1ms就中断一次)

解决:

        1)计算出任务阻塞时间;

        2)使用滴答定时器的中断周期改为低功耗运行的时间,在退出低功耗后,需要补上系统时钟节拍。

 令人开心的是:FreeRTOS低功耗模式Tickless模式机制已经处理好了这些难点,直接调用相关API函数使用即可。

三、Tickless模式修改配置

3.1、配置相关的宏定义

        1)configUSE_TICKLESS_IDLE-->该宏定义用于使能低功耗Tickless模式(1为使能,0不使能,其它值需要自己实现Tickless功能);

        2)configEXPECTED_IDLE_TIME_BEFORE_SLEEP-->该宏定义用于定义系统进入对应低功耗模式的最短时长(至少为2个系统节拍,也就是至少2ms);

        3)configPRE_SLEEP_PROCESSING(x)-->该宏定义用于系统在进入低功耗前执行的事务,如:进入低功耗前关闭外设时钟,以达到进一步降低低功耗目的;

        4)configPOSR_SLEEP_PROCESSING(x)-->该宏定义用于系统在退出低功耗前执行的事务,如:退出低功耗前开启外设时钟,以达到系统正常运行。

注意:configPRE_SLEEP_PROCESSING(x)与configPOSR_SLEEP_PROCESSING(x)需要直行实现函数内部操作-->给个宏定义到另一个函数,在另一个函数实现即可。

四、使用Tickless低功耗模式

4.1、使用步骤

        1)配置相关宏定义

        2)实现两个函数:configPRE_SLEEP_PROCESSING()、configPOSR_SLEEP_PROCESSING(),在这两个函数中实现进一步的低功耗(如关闭外部中断,关闭定时器等)

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

相关文章:

  • 实现了统一消息中心的微服务基础框架 JVS,快点赞收藏
  • VMware 安装 OpenWrt 旁路由并配置 PassWall
  • R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案
  • 嵌入式开发:你需要知道的5种简单
  • MVC与MVVM
  • Cortex-M0异常和中断
  • 数据库(6)--存储过程
  • c++ 指针、引用和常量
  • 1、HAL库UART 中断|DMA 自动回显接收数据
  • NPOI - ConditionalFormattingRule
  • JavaのString类这一篇就够了(包含StringBuffer_Builder)
  • C# dataGridView 导出表格 xls NPOI 2.4.1 版本
  • 秒杀项目的消息推送
  • 最近开发及 vue3 几个小总结
  • 代谢组学分享-花青素通过调节氨基酸代谢改善糖尿病肾病的肾功能
  • 超简单!pytorch入门教程:Tensor
  • 如何使用COCO数据集,注意事项
  • 金三银四跳槽季,JAVA面试撸题就来【笑小枫】微信小程序吧~
  • 分享115个HTML电子商务模板,总有一款适合您
  • Python 字符串
  • 总线定义,车载总线:车载etherNet or CAN
  • Python(for和while)循环嵌套及用法
  • 6万字电力行业系统解决方案光伏电站综合安防系统解决方案
  • [Android Studio]Android 数据存储--SQLite数据库存储
  • 学校节能降耗减排方案——能耗监管平台的建设及效果剖析
  • 探索IP地址的应用
  • 点赞破万!阿里面试官总结的2022最新1685页Java面试宝典太全了
  • 项目搭建规范
  • 8.Docker Machine
  • 如何配合使用ESLINT 和 PRETTIER