日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeRTOS 查询任务 剩余的栈空间的 方法

發(fā)布時間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeRTOS 查询任务 剩余的栈空间的 方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

FreeRTOS 源碼下載地址

1、官方文檔提供了 ? 函數(shù) ?用來查詢 ?任務(wù) 剩余 ? 棧 空間,首先是看官方的文檔解釋(某位大神 翻譯 的?官方文檔。)

參數(shù)解釋:?? ? xTask:被查詢?nèi)蝿?wù)的句柄——欲知如何獲得任務(wù)句柄,詳情請參見API 函數(shù)xTaskCreate()的參數(shù)pxCreatedTask。如果傳入 NULL 句柄,則任務(wù)查詢的是自身棧空間的高水線。

返回值:?任務(wù)棧空間的實際使用量會隨著任務(wù)執(zhí)行和中斷處理過程上下浮動。uxTaskGetStackHighWaterMark()返回從任務(wù)啟動執(zhí)行開始的運(yùn)行歷史中,棧空間具有的最小剩余量。這個值即是棧空間使用達(dá)到最深時的剩下的未使用的棧空間。這個值越是接近0,則這個任務(wù)就越是離棧溢出不遠(yuǎn)了。

?

?

下面要說我的 使用方法:?

? 首先 在 創(chuàng)建任務(wù)的時候 得 添加任務(wù)句柄:

具體方法是:

1、xTaskHandle?pvCreatedTask_ToggleLed4; //這句代碼 是定義一個 空指針變量。(typedef void * xTaskHandle;)

2、xTaskCreate(ToggleLed4, (int8_t *)"LED4", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO,&pvCreatedTask_ToggleLed4);//創(chuàng)建一個任務(wù)

3、要使用uxTaskGetStackHighWaterMark?這個函數(shù),首先得看下面說明:

  * 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,注,不是源文檔描述錯誤,是我理解錯誤,應(yīng)該修改配置文件 FreeRTOSConfig.h,在該文件中 增加 宏定義 #define?INCLUDE_uxTaskGetStackHighWaterMark 1。

?

4、//下面就是我要查詢的 任務(wù) 剩余的棧空間,里面調(diào)用了uxTaskGetStackHighWaterMark?這個函數(shù)

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、看 結(jié)果:

?

6、分析:

? ? ? ? ?1、這里的 ?“74”,應(yīng)該就是 ?74*4=296個 字節(jié)(1字節(jié)=8位),因為 freertos 在設(shè)置棧的時候是按照 “字”計算的,在STM32中一個字是32位!

? ? ? ???2、根據(jù) 返回的數(shù)據(jù)判斷,這個任務(wù) 還剩余 296個字節(jié)沒有使用。

   ?3、configMINIMAL_STACK_SIZE==128,還剩余74,就是已經(jīng)使用等于128-74=54,那么設(shè)置任務(wù)棧的時候應(yīng)該設(shè)置(已經(jīng)使用*2)即54*2=108合適,即2倍合適(參考),2017年11月7日08:56:24.

?

7、2016年11月28日17:25:23,可以通過API 直接看系統(tǒng)的運(yùn)行情況,進(jìn)行可視化調(diào)試,這里推薦一個大神的博客!

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

總結(jié)

以上是生活随笔為你收集整理的FreeRTOS 查询任务 剩余的栈空间的 方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。