FreeRTOS——优化系统(基于百问网FreeRTOS教学视频)

news2024/9/22 4:09:30

文章目录

    • 一、精细调整栈大小
    • 二、打印所有任务的栈信息
    • 三、统计CPU占比找出有问题的任务

一、精细调整栈大小

在创建任务时分配了栈,可以填入固定的数值比如 0xa5,以后可以使用以下函数查看" 栈的高水位",也就是还有多少空余的栈空间:

UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ); 

参数说明:

  • xTask:哪个任务;

  • 返回值:任务运行时、任务被切换时,都会用到栈。栈里原来值(0xa5)就会被覆盖。

    逐个函数从栈的尾部判断栈的值连续为 0xa5 的个数, 它就是任务运行过程中空闲内存容量的最小值。

    注意:假设从栈尾开始连续为 0xa5 的栈空间是 N 字节,返回值 是 N/4。

示例如下:

    UBaseType_t freeNum;
    TaskHandle_t xTaskHandle;
	
	xTaskHandle = xTaskGetCurrentTaskHandle();
    freeNum = uxTaskGetStackHighWaterMark(xTaskHandle);
    printf("FreeStack of Task %s : %d\n\r", pcTaskGetName(xTaskHandle), freeNum);

二、打印所有任务的栈信息

函数原型:

void vTaskList( signed char *pcWriteBuffer ); 

CubeMX配置如下:需要在FreeRTOS中间件中使能USE_STATS_FORMATTING_FUNCTIONSUSE_IDLE_HOOK

在这里插入图片描述
在这里插入图片描述

在freertosconfig.c文件中配置项 :

#define configGENERATE_RUN_TIME_STATS 1
#define configUSE_TRACE_FACILITY    1
#define configUSE_STATS_FORMATTING_FUNCTIONS  1

在freertos.c文件中,代码示例:

static signed char pcWriteBuffer[200];

void vApplicationIdleHook( void )
{

	int i;
	vTaskList(pcWriteBuffer);
	for(i= 0; i<22;i++)
	{
		printf("-");
	}
	printf("\r\n");
	printf("%s\n\r",pcWriteBuffer);

}

上机实验:
在这里插入图片描述

三、统计CPU占比找出有问题的任务

uxTaskGetSystemState:获得任务的统计信息

函数原型:

UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, 
					const UBaseType_t uxArraySize, 
					uint32_t * const pulTotalRunTime ); 

参数说明:

参数说明
pxTaskStatusArray指向一个 TaskStatus_t 结构体数组,用来保存任务的统计信息。有多少个任务?
可以用 uxTaskGetNumberOfTasks()来获得。
uxArraySize数 组 大 小 、 数 组 项 个 数 , 必 须 大 于 或 等 于 uxTaskGetNumberOfTasks()
pulTotalRunTime用来保存当前总的运行时间(更快的定时器),可以传入 NULL
返回值传入的 pxTaskStatusArray 数组,被设置了几个数组项。 注 意 : 如 果 传 入 的 uxArraySize 小 于 uxTaskGetNumberOfTasks(),返回值就是 0

在freertos.c文件中,示例代码如下:

static signed char pcWriteBuffer[200];

void vApplicationIdleHook( void )
{
	int i;
	//vTaskList(pcWriteBuffer);
	vTaskGetRunTimeStats(pcWriteBuffer);
	for(i= 0; i<22;i++)
	{
		printf("-");
	}
	printf("\r\n");
	printf("%s\n\r",pcWriteBuffer);

}

上机实验:
在这里插入图片描述

第一列为任务名称,第二列为运行时长,第三列为CPU占用率

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

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

相关文章

完美解决RTX5源码工程+最新emWin6.40的编译兼容问题,使能C编译器使用C11可解决

最新的emWin6.40仅提供了.a格式库&#xff0c;这个库兼容MDK&#xff0c;IAR和GCC&#xff0c;但是在MDK AC6下使用需要做如下操作 -fno-short-wchar -fshort-enums 他这个操作&#xff0c;正好跟RTX5源码工程添加的一个设置冲突了&#xff0c;通过搜索资料&#xff0c;发现使…

性能测试 —— linux服务器搭建JMeter+Grafana+Influxdb监控可视化平台!

前言 在当前激烈的市场竞争中&#xff0c;创新和效率成为企业发展的核心要素之一。在这种背景下&#xff0c;如何保证产品和服务的稳定性、可靠性以及高效性就显得尤为重要。 而在软件开发过程中&#xff0c;性能测试是一项不可或缺的环节&#xff0c;它可以有效的评估一个系…

优先级队列的实现

什么是优先级队列 优先级队列是一种特殊的数据结构&#xff0c;它类似于队列或栈&#xff0c;但是每个元素都关联有一个优先级或权重。在优先级队列中&#xff0c;元素的出队顺序不是简单地按照它们进入队列的先后顺序&#xff08;先进先出&#xff0c;FIFO&#xff09;&#…

vulnhub靶机 DC-9(渗透测试详解)

一、靶机信息收集 1、靶机下载 https://download.vulnhub.com/dc/DC-9.zip 2、靶机IP扫描 3、探测靶机主机、端口、服务版本信息 4、靶机目录扫描 二、web渗透测试 1、访问靶机IP 查看页面功能点&#xff0c;发现一个搜索框和登录框 2、测试一下是否存在sql注入 查看当前数…

快速解析数据挖掘,最短时间明白什么是数据挖掘------下

信息损失函数 &#xff08;Information Loss Function&#xff09;是衡量在数据转换或处理过程中信息丢失的程度的函数。在数据科学、机器学习和统计学中&#xff0c;信息损失是一个重要的概念&#xff0c;尤其是在数据降维、特征选择、数据压缩和隐私保护等领域。 信息损失函…

解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术

引言 在抖音上有许多诸如三维地图科普局、三维地图看世界和三维地图鉴赏等百万粉丝博主靠着三维地图科普城市、景区、人文和地理视频获赞百万&#xff0c;在我们浏览视频时犹如身临其境一般&#xff0c;那么制作这些视频需要什么GIS技术呢&#xff1f;如何利用MapMost技术自己…

怎么防止源代码泄露?十种方法杜绝源代码泄密风险

源代码是软件开发的核心资产之一&#xff0c;保护其不被泄露对企业的安全至关重要。源代码泄露不仅可能导致知识产权的丧失&#xff0c;还可能给企业带来经济损失和品牌形象的损害。以下是十种有效的方法&#xff0c;可以帮助企业杜绝源代码泄密的风险。 1. 代码加密 对源代码…

LeetCode 3148.矩阵中的最大得分:每个元素与其左或上元素之差的最大值(原地修改O(1)空间)

【LetMeFly】3148.矩阵中的最大得分&#xff1a;每个元素与其左或上元素之差的最大值&#xff08;原地修改O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-difference-score-in-a-grid/ 给你一个由 正整数 组成、大小为 m x n 的矩阵 g…

ESVC论文笔记

ESVC: COMBINING ADAPTIVE STYLE FUSION AND MULTI-LEVEL FEATURE DISENTANGLEMENT FOR EXPRESSIVE SINGING VOICE CONVERSION阅读笔记 发现问题 虽然SVC在自然度和相似度方面都取得了很好的效果,但音频中除了歌手身份之外,情感表达也是传递歌手感情和态度的必要条件&#xf…

17.实现一个算法根据电话按键上的数字和字母的映射关系,输入一个或多个数字返回所有它能表示的全部字母组合

17. Letter Combinations of a Phone Number 题目 Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given belo…

电子音乐制作软件有哪些 电音制作用什么软件 好用的能够创作音乐的软件推荐 电音基础新手入门

电子音乐目前已经成为了年轻人的一大爱好&#xff0c;而全国各地随处可见的音乐节更是代表着电子音乐文化已经逐渐被年轻人所接受&#xff0c;在这样的大背景下&#xff0c;一些年轻人也开始了自己创作电子音乐的道路。现在有了软件的帮助&#xff0c;我们能够更加随心所欲的创…

卡码网KamaCoder 110. 字符串接龙

题目来源&#xff1a;110. 字符串接龙 C题解1&#xff1a;深度搜索。一条路径走到黑&#xff0c;并且记录到达当前节点的最短路径长度&#xff0c;不断更新&#xff0c;如果不是最短路径就不用再遍历那条路。 #include <iostream> #include <vector> #include <…

数据结构基本概念和术语

概论 1.1 基本概念和术语 1.1.1 基本概念 计算机处理的的是数值性数据&#xff0c;当计算机处理用户信息表中的数据的时候&#xff0c;需要弄清3个问题 1.数据的逻辑结构 数据之间存在怎样的内在联系&#xff0c;数据中&#xff0c;有且只有一个是首节点/尾结点&#xff0…

Squish 8.0现已发布

本文翻译自&#xff1a;Squish 8.0 Available Now 原文作者&#xff1a;Qt Group质量保证高级解决方案工程师Katarina Behrens 审校&#xff1a;Jinjing Li Squish团队非常激动地宣布Squish GUI Tester 8.0现已发布。对于自动化跨平台GUI测试而言&#xff0c;这是一款软件质量…

41-设计规则:线宽规则

1.设置电源线规则和信号线规则 2.设置信号线规则 3.设置电源线规则 如果未生效&#xff1a; ① 提升优先级即可。 ②查看使能选项有没有勾选

2024医疗器械网络交易服务第三方平台备案申请流程

前几天&#xff0c;小编给大家分享了药品网络交易第三方平台备案申请流程&#xff0c;好多客户就来问&#xff0c;那医疗器械网络交易服务第三方平台备案怎么办理呢&#xff1f; 今天&#xff0c;就给大家好好聊聊医疗器械网络交易服务第三方平台备案申请流程&#xff0c;供大…

Xilinx课程,就这么水灵灵地上线了~

如果你想了解&#xff1a; 如何利用精通流水线&#xff08;Pipeline&#xff09;技术&#xff0c;让电路设计效率倍增&#xff1f; 如何掌握利用性能基线指导设计流程的方法&#xff1f; 如何理解集成电路设计中的UltraFast Design Methodology Implementation设计方法学中的…

C++拾趣——编译器预处理宏__COUNTER__的应用场景

大纲 生成唯一标识符调试信息宏展开模板元编程代码 在C中&#xff0c;__COUNTER__是一个特殊的预处理宏&#xff0c;它主要被用来生成唯一的整数标识符。这个宏是由一些编译器&#xff08;如GCC和Visual Studio&#xff09;内置支持的&#xff0c;而不是C标准的一部分。它的主要…

《AI视频类工具之五——​ 开拍》

一.简介 官网:开拍 - 用AI制作口播视频用AI制作口播视频https://www.kaipai.com/home?ref=ai-bot.cn 开拍是一款由美图公司在2023年推出,利用AI技术制作的短视频分享应用。这款工具通过AI赋能,为用户提供了从文案创作、视频拍摄到视频剪辑、包装的一站式解决方案,极大地…

Using the ST-LINK/V2-1 to program and debug the STM32 on board

1. Using the ST-LINK/V2-1 to program and debug the STM32 on board To program the STM32 on the board, plug in the two jumpers on CN2 要对板上的STM32进行编程&#xff0c;请插入CN2上的两个跳线 2. 单片机供电 标有IDD的跳线JP6用于测量STM32微控制器的功耗 拆下跳…