【RTOS】快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

news2024/11/17 12:49:45

目录

    • 十一、调试
      • 11.1 打印任务空闲栈
      • 11.2 打印所有任务栈信息
      • 11.3 CPU占用比
      • 11.4 空闲任务和钩子函数

十一、调试

该部分在上份代码基础上修改得来,代码下载链接:

https://wwzr.lanzout.com/in63o1lauwwh

密码:9bhf

该代码尽量做到最简,不添加多余的、不规范的代码。

内容主要包括

  • 打印任务空闲栈
  • 打印所有任务栈信息
  • 打印CPU占用比

最终实现效果:

  • 使用串口打印出:当前任务空闲栈、所有任务栈信息、CPU占用比

img

11.1 打印任务空闲栈

在FreeRTOS中,要打印任务的空闲栈(空余空间),可以使用任务状态查询函数 uxTaskGetStackHighWaterMark。这个函数返回任务栈的最小可用空间(以为单位,32位系统中,1字=4字节=32位)

示例:

UBaseType_t freeStack;

// 获取任务空闲栈
freeStack= uxTaskGetStackHighWaterMark(NULL);

// 打印任务空闲栈 (以字为单位)
printf("Task %s free stack: %u words\n", pcTaskGetName(NULL), freeStack);

实例:

img

img

11.2 打印所有任务栈信息

要打印所有任务的栈信息,你可以使用FreeRTOS的任务列表查询函数 vTaskList

// 定义一个缓冲区,用于存储任务列表信息
char g_taskListBuffer[1024];

// 获取任务列表信息
vTaskList(g_taskListBuffer);

// 打印任务列表
printf("Task List:\n%s", g_taskListBuffer);

需要在stm32cubemx中使能use_stats_formatting_functions参数。

img

实例:

img

img

每列的具体含义

  • Task: 任务的名称。
  • State: 任务的状态。包括 “R”(运行)、“B”(阻塞)、“D”(删除)等。X表示使用该函数的任务。
  • Priority: 任务的优先级。
  • Stack: 任务的空闲栈。
  • Num: 任务的编号。

11.3 CPU占用比

vTaskGetRunTimeStats 是一个 FreeRTOS 函数,用于获取系统中每个任务的运行时间统计信息。这个函数允许你了解每个任务在系统中的运行时间百分比,以及每个任务实际运行的时钟滴答数。

示例:

// 定义一个缓冲区,用于存储CPU占用比信息
char g_taskListBuffer[1024];

// 获取运行时间统计信息
vTaskGetRunTimeStats(g_taskListBuffer);

// 打印运行时间统计信息
printf("Run Time Stats:\n%s\n", g_taskListBuffer);

1 需要在stm32cubemx中使能generate_run_time_stats参数。

img

2 该函数需要用到getRunTimeCounterValue()函数来获取系统时间,但cubemx并未实例化这个函数。需要自己实现。

cubemx生成的

img

需要自己实现

img

实例

img

img

11.4 空闲任务和钩子函数

FreeRTOS 中的空闲任务是一个特殊的任务,优先级为0。

通常用于在系统没有其他任务执行时执行一些低优先级的任务。这个任务的名称通常是 “Idle”。

此外,FreeRTOS 还提供了与空闲任务关联的钩子函数,空闲任务的循环每执行一次,就会调用一次钩子函数vApplicationIdleHook()

钩子函数****的作用

  • 测量系统的空闲时间:空闲任务能被执行就意味着所有的高优先级任务都停止了,所以测量空闲任务占据的时间,就可以算出处理器占用率。
  • 让系统进入省电模式:空闲任务能被执行就意味着没有重要的事情要做,当然可以进入省电模式了。
  • 使用vTaskDelete()删除的任务,由钩子函数来释放内存。

因此,我们改用空闲任务提供的钩子函数,来显示之前的调试信息,是比较合理的。

首先,需要在stm32cubemx中使能use_idle_hook参数。

img

将调试代码,移到钩子函数

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1390480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么安装IK分词器

.安装IK分词器 1.在线安装ik插件(较慢) # 进入容器内部 docker exec -it elasticsearch /bin/bash ​ # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…

一个程序员“玩”出来的网站:每月成本仅 350 元,如今赚了 16.4 万元

很难想象:一个每月运行成本不到 50 美元(约人民币 358 元)的网站. 是如何做到收入 2.3 万美元(约人民币 16.4 万元)的? ** 如果你也对网站开发感兴趣? ** 首先,这个网站只有创始…

​LeetCode解法汇总82. 删除排序链表中的重复元素 II

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给定一个已排序的链表的头 head &#xf…

年终总结各类表格模板Excel,大屏可视化,PPT总结等

马上就要进行年底总结,很多职场人找不到模板而浪费很多时间 今天就给大家分享一些常用的模板,报表,可视化,大屏,PPT汇报,表格等。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 数据库Mysql 8.0 54集 数据库Oracle 21C 142集 Office 2021实战应…

[Docker] Docker为什么出现

Docker为什么出现 一款产品: 开发–上线 -->两套环境 | 应用配置 开发即运维! 环境配置十分麻烦,每一个机器都要部署环境(Redis, ES, Hadoop) 费时费力 项目带上配置环境安装打包。 传统: 开发jar&…

Python——VScode安装

⼀、下载安装 [root192 ~]# rpm --import https://packages.microsoft.com/keys/microsoft.asc[root192 ~]# sh -c echo -e "[code]\nnameVisualStudio Code\nbaseurlhttps://packages.microsoft.com/yumrepos/vscode\nenabled1\ngpgcheck1\ngpgkeyhttps://packages.mi…

华清远见作业第二十八天——网络编程(第三天)

思维导图&#xff1a; 向服务器发送数据实现下载 代码&#xff1a; #include <a.h> void menu(); int download(int cfd, struct sockaddr_in sin); #define SER_PORT 69 #define SER_IP "192.168.125.4" int main(int argc, const char *argv[]) {//1创建用…

基于ssm的线上旅游体验系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

生意参谋指数转换异常,有什么可替代的天猫数据查询工具?

近期&#xff0c;越来越多天猫平台的商家反映生意参谋的指数转换功能无法正常使用。 原本用指数替代真实数据的功能就已经把参考的意义和价值减半&#xff0c;而如今如果连指数转换功能都无法使用&#xff0c;必然会大大影响品牌商家在电商运营过程中严谨的数据分析和测算结果&…

短视频IP运营流程架构SOP模板PPT

【干货资料持续更新&#xff0c;以防走丢】 短视频IP运营流程架构SOP模板PPT 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 抖音15秒短视频剧本创作公式 在抖音这个短视频平台上&#…

ssm基于Java的药店药品信息管理系统的设计与实现论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广大…

一步直达 - CDPATH的妙用

文章目录 一步直达 - CDPATH的妙用更多信息 一步直达 - CDPATH的妙用 适用于贼长的目录路径 如果你的目录路径贼长&#xff0c;一定要用一下这个命令。 变量CDPATH定义了目录的搜索路径&#xff0c;这个设置特别适合经常需要进入到某个目录&#xff0c;此时这个设置就及其有用…

软件测试|Git:fatal: refusing to merge unrelated histories错误分析与解决

问题介绍 在使用Git时&#xff0c;有时我们可能会遇到以下错误消息&#xff1a; fatal: refusing to merge unrelated histories这个错误通常发生在尝试合并两个不相关的Git仓库历史时。在本文中&#xff0c;我们将详细解释为什么会出现这个错误以及如何解决它。 问题分析 …

使用Sqoop的并行处理:扩展数据传输

使用Sqoop的并行处理是在大数据环境中高效传输数据的关键。它可以显著减少数据传输的时间&#xff0c;并充分利用集群资源。本文将深入探讨Sqoop的并行处理能力&#xff0c;提供详细的示例代码&#xff0c;以帮助大家更全面地了解和应用这一技术。 Sqoop的并行处理 在开始介绍…

java获取已经发送谷歌邮件的打开状态

1.前言 现在网上的方案都是在邮件里面插入一张图片的地址&#xff0c;当收件人打开之后&#xff0c;就会发送请求到指定路径的服务器上&#xff0c;然后在请求的controller里面处理邮件的状态&#xff0c;这个方案确实是行得通的&#xff0c;本文章只是给大家避个坑&#xff0…

UE4使用技巧

打开蓝图编辑器时不是打开一个新窗口&#xff0c;而是作为主窗口 适用于全部的打开新窗口的操作 蓝图编译时自动保存 开始游戏后立即捕获鼠标

服务器感染了.DevicData-P-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 在当今数字化时代&#xff0c;勒索病毒已成为网络安全威胁的一个严峻问题。其中&#xff0c;.DevicData-P-XXXXXXXX 勒索病毒以其恶意加密文件的手段引起了广泛关注。本文将介绍该病毒的特点、数据恢复方法以及如何预防遭受其攻击。 如不幸感染这个勒索病毒&…

OpenHarmony—Linux之系统调用

Linux之系统调用 这里我们只讨论&#xff1a; 硬件&#xff1a; Arm64系统&#xff1a; Linux系统 (Kernel-5.15-rc1)高级语言&#xff1a; C &#xff08;glibc-2.34&#xff09;模式&#xff1a; 64位 &#xff08;即未定义CONFIG_COMPAT&#xff09; 2、什么是系统调用 …

怎么安装es、kibana(单点安装)

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&#xff0c;这个镜像体积非常大&#xff0c…

新版网易滑块

突然发现脸皮厚根本没用&#xff0c;大冬天的&#xff0c;风吹过来还是会冷。 大哥们多整件衣裳&#xff0c;好冷&#xff01;&#xff01;&#xff01;&#xff01; 网易更新了&#xff0c;这俩 dt跟f值。 dt为 这里返回的&#xff0c;忽略掉他。 data参数中的d值&#xff…