FreeRTOS 查詢任務 剩余的棧空間的 方法


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

 

 

如果文章對你有幫助,微信贊賞碼:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM