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

FreeRTOS实现低功耗管理

FreeRTOS实现低功耗管理

  • 一.配置FreeRTOSConfig.h
    • 1.1 使能启用Tickless模式
    • 1.2 配置进入低功耗模式时间
  • 二.FreeRTOS进入Tickless模式条件
  • 三.FreeRTOS如何执行低功耗
    • 3.1 vPortSuppressTicksAndSleep函数
    • 3.2 实现自己低功耗函数 MySleep()

一.配置FreeRTOSConfig.h

1.1 使能启用Tickless模式

#define configUSE_TICKLESS_IDLE		1	//启用低功耗Tickless模式

1.2 配置进入低功耗模式时间

这里配置为2个Tick(最少配置为2个Tick)

#ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP	2
#endif
#if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2#error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2
#endif

二.FreeRTOS进入Tickless模式条件

这里涉及到FreeRTOS的机制,简单来说就是当所有任务都被挂起或阻塞时,FreeRTOS就会执行空闲任务,然后经过configEXPECTED_IDLE_TIME_BEFORE_SLEEP(我们上面配置的)个tick后就会进入低功耗模式。

三.FreeRTOS如何执行低功耗

3.1 vPortSuppressTicksAndSleep函数

找对自己对应平台下的portmacrocommon.h文件,博主使用的是M33内核的mcu-----对应目录为portable/ARM_CM33/portmacrocommon.h

    #ifndef portSUPPRESS_TICKS_AND_SLEEPextern void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime );#define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime )    vPortSuppressTicksAndSleep( xExpectedIdleTime )#endif

当进入低功耗模式后会自动调用 vPortSuppressTicksAndSleep这个函数,但是FreeRTOS只实现了M3和M4内核的低功耗指令。如果是此内核的mcu,可不做更改。

3.2 实现自己低功耗函数 MySleep()

如果不是M3或者M4内核的mcu,只能自己实现了,我们只需要要换成自己的函数就行,然后自己实现,如下

   #ifndef portSUPPRESS_TICKS_AND_SLEEPextern void MySleep( TickType_t xExpectedIdleTime );#define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime )    MySleep( xExpectedIdleTime )#endif

这里,我们只需要实现自己函数即可,系统就会自动调用。
示例如下:

void MySleep(TickType_t xExpectedIdleTime ) {
//反初始化设备
//进入低功耗模式(板级代码),根据自己的mcu指令,一般都有库函数可以调用
//初始化设备
//恢复任务
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何将PostgreSQL的数据实时迁移到SelectDB?
  • 10. Docker 使用案例
  • Casper 安全事件已解决;区块链网络恢复运行
  • 【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)
  • Java单元覆盖率工具JaCoCo使用指南
  • Java-文件操作和IO
  • OpenCV||超详细的图像分割
  • Mybatis-plus乐观锁
  • 二维数据平滑,滤波方法比较:移动平均平滑、中值滤波、指数加权移动平均、Savitzky-Golay、高斯滤波、卡尔曼滤波
  • Apple Vision Pro 游戏开发:挑战与反思
  • js中的全局函数有这些
  • 使用 Python 制作一个属于自己的 AI 搜索引擎
  • CSS实现元素hover时背景色拉伸渐变
  • C++入门1
  • Python处理Redis
  • ----------
  • 【Amaple教程】5. 插件
  • 【个人向】《HTTP图解》阅后小结
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular6错误 Service: No provider for Renderer2
  • angular组件开发
  • JavaScript-Array类型
  • JavaScript的使用你知道几种?(上)
  • Java小白进阶笔记(3)-初级面向对象
  • JS题目及答案整理
  • Linux Process Manage
  • SegmentFault 2015 Top Rank
  • use Google search engine
  • 电商搜索引擎的架构设计和性能优化
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何学习JavaEE,项目又该如何做?
  • 算法-图和图算法
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 我是如何设计 Upload 上传组件的
  • 协程
  • 异常机制详解
  • 自定义函数
  • 阿里云重庆大学大数据训练营落地分享
  • 选择阿里云数据库HBase版十大理由
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ‌JavaScript 数据类型转换
  • #include到底该写在哪
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)Nginx简介和安装教程
  • (31)对象的克隆
  • (k8s)Kubernetes本地存储接入
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (十三)Flink SQL
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • *** 2003
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net - 类的介绍