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个字节没有使用,造成浪费,所以在设置栈空间的时候 应该减少设置,避免浪费!                

    如果问题解决起来不妥或者有更好的解决办法,麻烦请告知,帮助曾经和你一样的入门者,谢谢。
  • 相关阅读:
    CF1036C Solution
    CF1041E Solution
    CF1043E Solution
    CF1054D Solution
    CF1032D Solution
    题解 P6194 【[EER1]苏联人】
    题解 CF1324A 【Yet Another Tetris Problem】
    题解 CF1325A 【EhAb AnD gCd】
    题解 CF1325B 【CopyCopyCopyCopyCopy】
    题解 AT5805 【Bishop】
  • 原文地址:https://www.cnblogs.com/ourran/p/5740063.html
Copyright © 2011-2022 走看看