FreeRTOS 源码下载地址

1、官方文档提供了   函数  用来查询  任务 剩余   栈 空间,首先是看官方的文档解释(某位大神 翻译 的 官方文档。)

参数解释:     xTask:被查询任务的句柄——欲知如何获得任务句柄,详情请参见API 函数xTaskCreate()的参数pxCreatedTask。如果传入 NULL 句柄,则任务查询的是自身栈空间的高水线。

返回值: 任务栈空间的实际使用量会随着任务执行和中断处理过程上下浮动。uxTaskGetStackHighWaterMark()返回从任务启动执行开始的运行历史中,栈空间具有的最小剩余量。这个值即是栈空间使用达到最深时的剩下的未使用的栈空间。这个值越是接近0,则这个任务就越是离栈溢出不远了。

下面要说我的 使用方法:

首先 在 创建任务的时候 得 添加任务句柄:

具体方法是:

1、xTaskHandle pvCreatedTask_ToggleLed4; //这句代码 是定义一个 空指针变量。(typedef void * xTaskHandle;)

2、xTaskCreate(ToggleLed4, (int8_t *)"LED4", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO,&pvCreatedTask_ToggleLed4);//创建一个任务

3、要使用uxTaskGetStackHighWaterMark 这个函数,首先得看下面说明:

  * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for
  * this function to be available.

意思是在FreeRTOS.h(英文描述错误,实际在这个FreeRTOS.h中)文件中要 把 INCLUDE_uxTaskGetStackHighWaterMark的宏定义改为1,不能改的,修改一下文档的属性,把只读去掉!

2018年8月8日14:06:45,注,不是源文档描述错误,是我理解错误,应该修改配置文件 FreeRTOSConfig.h,在该文件中 增加 宏定义 #define INCLUDE_uxTaskGetStackHighWaterMark 1。

4、//下面就是我要查询的 任务 剩余的栈空间,里面调用了uxTaskGetStackHighWaterMark 这个函数

void ToggleLed4(void * pvParameters)
{
  unsigned portBASE_TYPE uxHighWaterMark;
  for( ;; )
  {
    /* toggle LED4 each 250ms */
    STM_EVAL_LEDToggle(LED4);
    uxHighWaterMark=uxTaskGetStackHighWaterMark( pvCreatedTask_ToggleLed4 );
    printf("ToggleLed4剩余栈空间是多少:%d.\r\n",uxHighWaterMark);//gxp,串口检测,2015年11月17日11:26:42
    vTaskDelay(500);
  }
}

5、看 结果:

6、分析:

1、这里的  “74”,应该就是  74*4=296个 字节(1字节=8位),因为 freertos 在设置栈的时候是按照 “字”计算的,在STM32中一个字是32位!

         2、根据 返回的数据判断,这个任务 还剩余 296个字节没有使用。

    3、configMINIMAL_STACK_SIZE==128,还剩余74,就是已经使用等于128-74=54,那么设置任务栈的时候应该设置(已经使用*2)即54*2=108合适,即2倍合适(参考),2017年11月7日08:56:24.

7、2016年11月28日17:25:23,可以通过API 直接看系统的运行情况,进行可视化调试,这里推荐一个大神的博客!

  朱工http://blog.csdn.net/zhzht19861011/article/details/50717549

如果文章对你有帮助,微信赞赏码:

FreeRTOS 查询任务 剩余的栈空间的 方法的更多相关文章

  1. linux查看修改线程默认栈空间大小(ulimit -s)

    linux查看修改线程默认栈空间大小 ulimit -s 1.通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2.通过命令 ulimit -s 设置大 ...

  2. 更改Linux默认栈空间的大小

    有时候在Linux写C++程序处理大量的数据,程序内部需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现段错误.这种情况可能是分配的数组大小超过了Linux系统的默认栈空间的大小 ...

  3. 《Cortex-M0权威指南》之体系结构---栈空间操作

    转载请注明来源:cuixiaolei的技术博客 栈空间作为一种存储器使用机制,是"先入先出"的结构,在系统空间中用作临时数据的存储.栈空间操作的关键之一为栈指针寄存器,每次执行栈操 ...

  4. Linux学习笔记4——函数调用栈空间的分配与释放

    一.函数执行时使用栈空间作为自己的临时栈,3种方式决定编译器清空栈的方式:__stdcall. __fastcall.__cdecl 1.__stdcall表示每个调用者负责清空自己调用的函数的临时栈 ...

  5. [转载]如何查看某个查询使用了多少TempDB空间

    http://www.cnblogs.com/CareySon/p/3910337.html 通过下面脚本可以查看某个查询实用的TempDB的空间. 第一步是查询出当下TempDB实用空间是多少, 第 ...

  6. java虚拟机 jvm 出入java栈 栈空间内存分配

    java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中 ...

  7. [转帖] Linux 下面栈空间大小的实验

    比如局部变量是保存在栈空间中的,今天突然在想栈的上限是多大呢,什么时候才会栈溢出? ulimit 命令 linux下使用ulimit 命令可以查看系统的很多上限值. ulimit -a 查看所有 ul ...

  8. 栈空间默认1M,测试存进数据时间

    #include <stdio.h> 栈空间是1024*1024,一兆1M,其中包含了进入main函数之前的1万左右空间.全空间是足的.速度:栈>全局>堆 测试运算时间.100 ...

  9. MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句

    查询所有数据库占用磁盘空间大小的SQL语句: ,),' MB') as data_size, concat(,),'MB') as index_size from information_schema ...

随机推荐

  1. Spring_Spring与IoC_基于XML的DI

    一.注入分类 bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化时由容器自动完成的,称为注入.根据注入方式的不同,常用的有2类:设值注入.构造注入.(还有一种,实现 ...

  2. ZT 为什么Java中继承多数是有害的?

    大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“Java设计模式”一书详细阐述了怎样用接口继承 ...

  3. JavaScript String对象常用方法

    length 返回字符串的长度(字符数) var str='Hello World!'; str.length; charAt() 返回指定位置的字符,第一个字符位置为0 var str='Hello ...

  4. VC编程操作word2010生成表格

    作者:朱金灿 来源:http://blog.csdn.net/clever101 一.   右键单击工程节点,然后选择添加类,如下图: 二.   添加TypeLib中的MFC类,如下图: 三.   选 ...

  5. _itoa atoi、atof、itoa、itow _itoa_s 类型转换使用说明

    原文:http://www.cnblogs.com/lidabo/archive/2012/07/10/2584706.html _itoa 功能:把一整数转换为字符串 用法:char * _itoa ...

  6. DDMS 使用小结

    DDMS简介 DDMS功能详解 1 Devices面板 2 功能面板 3 LogCat and Console 1.DDMS简介 DDMS的全称是Dalvik Debug Monitor Servic ...

  7. named 快速部署及主机记录普及

    实验环境centos7.2,仅供参考 yum -y install epel-release    --安装最新yum配置源 cd /etc/yum.repos.d/ # wget http://re ...

  8. js常用代码记录

    1.动态key得到某对象中相对应的value js中想根据动态key得到某对象中相对应的value的方法有二: var key = "name1";var value = obj[ ...

  9. web.xml配置错误页面,及输出错误信息

    1.需要在web.xml中配置相关信息 <!-- 默认的错误处理页面 --> <error-page> <error-code>403</error-code ...

  10. sudo:*:command not found

    原因:执行sudo后,sudo会根据visudo里面配置的secure_path来找寻命令,所以sudo尽量使用绝对路径 sudo bash-c "echo $PATH"也可以看到 ...