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

嵌入式面试——FreeRTOS篇(八) Tickless低功耗

本篇为:FreeRTOS Tickless 低功耗模式篇

一、低功耗模式简介

1、低功耗介绍

答:

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

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

两者的区别:

        第一种是针对于裸机的;在裸机环境上是不涉及一些线程的保护。而FreeRTOS是存在线程的,所以FreeRTOS的Tickless为了防止某些操作或者其他任务打断是有线程保护的。

二、Tickless模式详解

1、STM32低功耗模式

答:

        STM32低功耗模式有3种,分别是:睡眠模式、停止模式、待机模式。

在FreeRTOS中主要使用的是睡眠模式:

  • 进入睡眠模式: WFI 指令(_WFI )、WFE 指令(_WFE) 。
  • 退出睡眠模式:任何中断或事件都可以唤醒睡眠模式。

2、Tickless模式如何降低功耗

答:

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

3、为什么要有Tickless模式

答:

        任务运行时间统计实验中,可以看出,在整个系统的运行过程中,其实大部分时间是在执行空闲任务。

        空闲任务:是在系统中的所有其他任务都阻塞或挂起时才运行的。

4、为了可以降低功耗,又不影响系统运行,该怎么做?

答:

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

难点

  1. 进入低功耗之后,多久唤醒?也就是下一个要运行的任务如何被准确唤醒。
  2. 任何中断均可唤醒MCU,若滴答定时器频繁中断则会影响低功耗的效果?

解决

        将滴答定时器的中断周期修改为低功耗运行时间,退出低功耗后,需补上系统时钟节拍数。

值得庆幸的是:FreeRTOS 的低功耗 Tickless 模式机制已经处理好了这些难点。

三、Tickless模式相关配置项

1、Tickless模式配置

答:

  • configUSETICKLESSIDLE

        此宏用于使能低功耗 Tickless 模式 。正常使用配置为1。

  • configEXPECTEDIDLETIMEBEFORESLEEP

        此宏用于定义系统进入相应低功耗模式的最短时长。需要配置为>2的值,(2ms)

  • configPRESLEEPPROCESSING(x)

        此宏用于定义需要在系统进入低功耗模式前执行的事务,如:进入低功耗前关闭外设时钟,以达到降低功耗的目的。

  • configPOSRSLEEPPROCESSING(x)

        此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行。

2、需要系统运行低功耗模式需满足以下几个条件

答:

  1. 在 FreeRTOSConfig.h 文件中配置宏定义 configUSETICKLESSIDLE 为 1 。
  2. 满足当前空闲任务正在运行,所有其他任务处在挂起状态或阻塞状态。
  3. 当系统可运行于低功耗模式的时钟节拍数大于等于configEXPECTEDIDLETIMEBEFORESLEEP(该宏默认为2个系统时钟节拍)。

3、若想系统进入低功耗时功耗达到最低

答:

  1. 在进入睡眠模式前,可以关闭外设时钟、降低系统主频等,进一步降低系统功耗(调用函数configPRESLEEPRPOCESSING(),需自行实现该函数的内部操作)。
  2. 退出睡眠模式后,开启前面所关闭的外设时钟、恢复系统时钟主频等(退出睡眠模式后,开启前面所关闭的外设时钟、恢复系统时钟主频等)。

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

相关文章:

  • 基于facefusion的换脸
  • Hive数仓操作(十三)
  • MyBatis XML映射文件
  • 「PYTHON」配置支持cuda计算的torch环境
  • Chromium 中chrome.history扩展接口c++实现
  • (Linux和数据库)1.Linux操作系统和常用命令
  • Linux——echo-tail-重定向符
  • GitHub Copilot 使用手册(一)--配置
  • 【论文阅读】Cross Attention Network for Few-shot Classification
  • CV图像处理小工具——json文件转P格式mask
  • Typora 快捷键操作大全
  • <Project-8.1.1 pdf2tx-mm> Python 调用 ChatGPT API 翻译PDF内容 历程心得
  • JDK1.1主要特性
  • 软件测试工作中-商城类项目所遇bug点
  • Java多线程面试题
  • 安徽大学《2022年+2023年831自动控制原理真题》 (完整版)
  • Vulnhub靶场案例渗透[6]- DC6
  • FreeSWITCH 分机网关路由
  • 数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全
  • 区块链积分系统:重塑支付安全与商业创新的未来
  • Django学习笔记十三:优秀案例学习
  • SSH 公钥认证:从gitlab clone项目repo到本地
  • linux 搭建sentinel
  • 微服务发展历程
  • 提示词优化、GPTs逆向工程、大语言模型原理、大语言模型优化、开源模型本地私有化部署、从零构建大语言模型、智能体构建以及大语言模型的发展趋势
  • nn.Conv2d(二)
  • 获取鸿蒙设备Udid遇到的问题
  • 【华为HCIP实战课程十】OSPF网络DR和BDR实战讲解,网络工程师
  • 视频怎么去除杂音保留人声?让人声更动听!视频噪音处理攻略
  • 洗衣店数字化转型:Spring Boot订单管理