freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

2023-11-09

摘要

每个任务都有自己的堆栈,堆栈的总大小在创建任务的时候就确定了,此函数用于检查任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!FreeRTOS 把这个历史剩余最小值叫做“高水位线”。此函数相对来说会多耗费一点时间,所以在代码调试阶段可以使用,产品发布的时候最好不要使用。

使用说明

要使用此函数的话宏INCLUDE_uxTaskGetStackHighWaterMark 必须为 1,
此函数原型如下:UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )

参数:

xTask: 要查询的任务的任务句柄,当这个参数为 NULL 的话说明查询自身任务(即调用函数 uxTaskGetStackHighWaterMark()的任务)的“高水位线”。

返回值

任务堆栈的“高水位线”值,也就是堆栈的历史剩余最小值。

例子

首先将FreeRtos.h中的INCLUDE_uxTaskGetStackHighWaterMark 置 1
在这里插入图片描述
官方介绍
**在这里插入图片描述**
在这里插入图片描述

#define START_TASK_PRIO			1
#define START_STK_SIZE			128
void start_task(void * pvParameters);  		//任务函数
TaskHandle_t StartTask_Handler;				//任务句柄

#define SYSLED_TASK_PRIO   	    2   		//led灯任务优先级
#define SYSLED_STK_SIZE    		64			//任务堆栈大小
TaskHandle_t SYSLEDTask_Handler;			//任务句柄
void sysled_task(void *pvParameters);		//led灯任务函数

//创建开始任务
	xTaskCreate	(
					(TaskFunction_t ) 	start_task,
					(const char * 	)	"start_task",
					(uint16_t 		)	START_STK_SIZE,
					(void * 		)	NULL,
					(UBaseType_t 	)	START_TASK_PRIO,
					(TaskHandle_t *	)	&StartTask_Handler
				);
					
	vTaskStartScheduler();  //开始任务调度
	while(1);



//开始任务池
void start_task(void *pvParameters)
{
	taskENTER_CRITICAL();  //进入临界区
	
	xTaskCreate((TaskFunction_t)sysled_task,	(const char *)"sysled_task",	(uint16_t)SYSLED_STK_SIZE,		(void *)NULL, (UBaseType_t)SYSLED_TASK_PRIO,	(TaskHandle_t *)&SYSLEDTask_Handler); 		//系统指示灯任务
	vTaskDelete(StartTask_Handler); //删除开始任务
	taskEXIT_CRITICAL();   			//退出临界区	
}

UBaseType_t more; 
系统指示灯
void sysled_task(void *pvParameters)
{
	while(1)
	{
		more  = uxTaskGetStackHighWaterMark(NULL);
		vTaskDelay(LED_vTASKdelay);
	}
}

DEBUG调试如下:
在这里插入图片描述

总结

在创建任务时 分配的堆栈大小是64K
目前剩余0x26换算成十进制是38K(剩余量)
所以该任务占用了64-38=26K

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况 的相关文章

  • 海康和多益面经

    海康的电话面试主要是谈项目 检测主要谈到faster rcnn模型在项目中的使用和感受野的问题 分割主要谈到u net网络模型本身的优点和在具体场景下的应用细节 因此准备一个好的自我介绍是必不可少的 多益网络的面试是视频面试 首先是自我介绍

随机推荐

  • 数据库原理概念复习

    1 绪论 1 数据是数据库中存储的基本对象 2 数据库是长期存储在计算机内 有组织 可共享的大量数据集合 数据库中的数据按照一定的数据模型组织 描述和存储 具有较小的冗余度 较高的数据独立性和易扩展性 并可为各种用户共享 3 数据库管理系统
  • MySQL表操作:提高数据处理效率的秘诀(进阶)(2)

    学习难免有坎坷 重要的是你能尽力而为 持之以恒 作者 不能再留遗憾了 专栏 MySQL学习 本文章主要内容 MySQL表操作进阶 聚合查询和联合查询 文章目录 前言 聚合查询 聚合函数 group by子句 having 子句 联合查询 内
  • 有哪些提供比较好的网页模板网站?

    说到网页建站模板 有很多人可能会在第一时间想到织梦CMS Wordpress等建站主题 的确这些开源程序的建站主题为广大中小建站者提供了极大的便利 只需要略懂建站方面的知识 就可以方便的玩转模板建站 如果选择织梦CMS 那么我们选择模板通常
  • 简单理解万向锁

    万向锁是什么 x轴旋转 90度 此时我们修改y轴表现为local坐标轴z轴的旋转 而修改z轴仍然为z轴的旋转 即万象锁 首先 在一个苹果 随便什么 上扎三个牙签代表local的xyz 1先在x轴转90 再在y轴转90 拍张照记录为 90 9
  • 在windows配置redis的一些错误及解决方案

    目录 Unable to connect to Redis nested exception is io lettuce core RedisConnectionException 用客户端Redis Desktop Manager一样的密
  • 记录个推推送设置华为角标失败的问题

    背景 Flutter项目集成个推 场景 后台通过个推离线推送添加了角标数字 然后应用启动的时候需要清除 查看个推文档有一个方法设置角标数字 具体方法 PushManager getInstance setHwBadgeNum Context
  • Halcon 拟合直线

    本文用 Halcon 的矩阵操作实现最小二乘拟合直线 首先随机生成一组数据 Mx 100 10 500 tuple length Mx len tuple gen const len 5 r Ma 2 Mb 40 tuple rand le
  • 【numpy】argmax参数辨析(axis=0,axis=1,axis=-1)

    every blog every motto You can do more than you think 0 前言 网上一般都是axis 0 axis 1 很少有axis 1的博客 在这进行简单的小结 后续可能会增补 说明 代码在 jup
  • 抱抱脸(hugging face)教程-中文翻译-预处理

    预处理 在您可以在模型中使用数据之前 需要将数据处理为模型可接受的格式 模型不理解原始文本 图像或音频 这些输入需要转换成数字并组装成张量 在本教程中 您将 用tokenizer处理文本 用特征提取器对图像或音频数据进行预处理 使用处理器预
  • sqlserver:使用 SqlBulkCopy 批量插入数据

    环境 window 10 sqlserver 2014 参考 博文 SqlBulkCopy使用注意事项 1 问题场景 在批量迁移或导入数据时 我们可能会遇到插入大量数据的问题 比如 100万 500万 甚至几千万 这个时候 如果我们再使用普
  • Mac终端下出现bogon的解决方案

    现象 mac终端的hostname变成了bogon 解决方案 命令行重新设置一下hostname sudo scutil set HostName your hostname 原因 这是因为终端会先向 DNS 请求查询当前 IP 的反向域名
  • 修改git提交历史中的作者信息

    新建了一个仓库 提交了修改并push 发现提交历史的作者信息使用的是全局的配置 即 gitconfig中 user 的信息 想只要针对这个仓库配置另外的作者信息 到这个仓库下vi git config 编辑了额外的 user 信息 这样这个
  • java管理系统程序_用java来实现一个进程管理系统

    package test1 用户类 public class User private String name private int age public String getName return name public void se
  • 通过实例告诉你lua中ipairs到底是怎么遍历的!

    这个的文章挺多的 但是有好几种说法并且不全 有人说是忽略手动设定值 有人说是从1开始数 直到序号断开 还有人给出结果 但是和我实机测试的效果不一样 所以我自己总结一篇 经过我的测试和总结得到以下结论 ipairs是一个专用的遍历函数 主要用
  • 艾伦·麦席森·图灵

    艾伦 麦席森 图灵 艾伦 麦席森 图灵 英语 Alan Mathison Turing 1912年6月23日 1954年6月7日 英国数学家 逻辑学家 被称为计算机科学之父 人工智能之父 1931年图灵进入剑桥大学国王学院 毕业后到美国普林
  • kettle问题:The last packet successfully received from the server was 156 milliseconds ago.

    在使用kettle时遇到MySQL数据库连接问题 1 Navicat可以连接到目标MySQL库 说明不是数据库权限的问题 2 用kettle可以连接其他同版本MySQL库 说明也不是jar包的问题 最终 尝试过重启电脑 删除kettle文件
  • Android之媒体扫描

    媒体扫描时序图 看了上面的时序图是否感觉比较绕 一会Java层 一会Native层 其实只要了解它们为什么这样做就比较好理解为什么这样做了 第一次 扫描路径 查找媒体文件 找到媒体文件之后就告知上层 第二次 上层收到Native层已找到媒体
  • 大数据处理及其研究进展

    一 大数据基本概念 大数据Big Data是指大小超出了常用的软件工具在运行时间内可以承受的收集 管理和处理数据能力的数据集 大数据是目前存储模式与能力 计算模式与能力不能满足存储与处理现有数据集规模产生的相对概念 大数据的预处理 主要完成
  • vue组件的分类

    vue组件的分类 一般来说 Vue js 组件主要分成三类 由 vue router 产生的每个页面 它本质上也是一个组件 vue 主要承载当前页面的 HTML 结构 会包含数据获取 数据整理 数据可视化等常规业务 整个文件相对较大 但一般
  • freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

    摘要 每个任务都有自己的堆栈 堆栈的总大小在创建任务的时候就确定了 此函数用于检查任务从创建好到现在的历史剩余最小值 这个值越小说明任务堆栈溢出的可能性就越大 FreeRTOS 把这个历史剩余最小值叫做 高水位线 此函数相对来说会多耗费一点