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

FreeRTOS学习:优化系统

怎么精细的调整栈的大小

当开启其他任务时,为什么OLED不亮呢(游戏任务)?

因为游戏任务中的定时器的优先级太低了,并且是一直等待,所以无法运行游戏任务。

这件事说明了,要让定时器/中断的优先级要足够高

如何计算空闲的栈呢?

使用函数进行计算剩余的空间

整个栈都写0xa5a5a5a5

这样,如果被使用,写入的数据就不是0xa5a5a5a5,然后从下遍历,就能知道任务占用多少栈。然后就可以,在创建任务时,分配少量的栈

函数的使用

这样最后就将当前任务的句柄加上剩余空间打印到串口上

然后再根据剩余的空间进行修改栈的大小

打印所有任务的栈信息

使用函数

  • vTaskList :获得任务的统计信息,形式为可读的字符串。注意,pcWriteBuffer必须足够大。

使用这个函数,定义个数组存放读取的数据

打印数组就可以了

想要使用这个函数,需要设置

USE_STATS_FORMATTING_FUNCTIONS

统计格式化函数(支持打印任务状态)

Enabled

但是为了不影响其他任务,应该在空闲任务中调用此函数

打开钩子函数(空闲任务)

使用

找出并改进大量消耗CPU的任务

使用函数

  • vTaskGetRunTimeStats:获得任务的运行信息,形式为可读的字符串。注意,pcWriteBuffer必须足够大。

现象

函数的使用要求

宏定义开启:在FreeRTOSConfig.h文件中,需要将GENERATE_RUN_TIME_STATS宏定义设置为1(或者Enabled,不同版本表述可能有差异) 。这是启用运行时间统计功能的开关,只有开启后,vTaskGetRunTimeStats函数才能正常工作。

时间基准函数设置:还需要定义portGET_RUN_TIME_COUNTER_VALUE()宏,用于获取系统运行时间计数器的值。在基于不同硬件平台和 RTOS 移植时,该宏需要根据实际情况进行正确定义,例如在 STM32 平台上,可能会基于 SysTick 定时器来实现该宏,返回当前的系统滴答数。

GENERATE_RUN_TIME_STATS = Enabled(启用任务运行时间统计 )

使用

MPU6050的当不使用时CPU占用率4%,很高

当不使用时应该为<1%才对 所以得进行修改程序

http://www.xdnf.cn/news/17631.html

相关文章:

  • LeetCode_哈希表
  • 论文阅读:Aircraft Trajectory Prediction Based on Residual Recurrent Neural Networks
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • sqllabs——Less1
  • MySQL面试题及详细答案 155道(041-060)
  • ThreadLocal有哪些内存泄露问题,如何避免?
  • Mysql笔记-存储过程与存储函数
  • 【Linux】使用静态 BusyBox 解决操作系统“塌方”问题
  • ADK[3]历史对话信息保存机制与构建多轮对话机器人
  • 单片机捷径
  • nginx下lua的实现机制、Lua错误处理、面向对象
  • Unity 遮挡显示效果 Shader
  • 异步问题的概念和消除问题技巧
  • 机器学习 DBScan
  • Java语言简介
  • 《算法导论》第 17 章 - 摊还分析
  • 【Docker进阶实战】从多容器编排到集群部署
  • 谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境
  • 【PyTorch】单目标检测项目部署
  • BGP知识点总结
  • MACBOOK M1安装达梦8数据库
  • 机器学习实战·第三章 分类(1)
  • 组合期权:对角价差
  • Python描述符进阶:自定义文档与属性删除的艺术
  • 2025年全国青少年信息素养大赛Scratch编程践挑战赛-小高组-初赛-模拟题
  • P3232 [HNOI2013] 游走,solution
  • redis 全局命令、数据结构和内部编码、单线程架构
  • 深入理解C语言一维数组的本质:数组名、指针常量与访问细节
  • 250810-OpenWebUI集成Dify应用
  • uboot使用指南