zoukankan      html  css  js  c++  java
  • FreeRTOS 查询任务 剩余的栈空间的 方法

    From:http://www.cnblogs.com/suozhang/p/5301054.html

    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,不能改的,修改一下文档的属性,把只读去掉!

    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. ",uxHighWaterMark);//gxp,串口检测,2015年11月17日11:26:42
        vTaskDelay(500);
      }
    }

    5、看 结果:

    6、分析:

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

             2、根据 返回的数据判断,这个任务 还剩余 296个字节没有使用,造成浪费,所以在设置栈空间的时候 应该减少设置,避免浪费!                

    如果问题解决起来不妥或者有更好的解决办法,麻烦请告知,帮助曾经和你一样的入门者,谢谢。
  • 相关阅读:
    【leetcode】416. Partition Equal Subset Sum
    【leetcode】893. Groups of Special-Equivalent Strings
    【leetcode】892. Surface Area of 3D Shapes
    【leetcode】883. Projection Area of 3D Shapes
    【leetcode】140. Word Break II
    【leetcode】126. Word Ladder II
    【leetcode】44. Wildcard Matching
    【leetcode】336. Palindrome Pairs
    【leetcode】354. Russian Doll Envelopes
    2017.12.22 英语面试手记
  • 原文地址:https://www.cnblogs.com/ourran/p/5740063.html
Copyright © 2011-2022 走看看