FreeRTOS 查询任务 剩余的栈空间的 方法
FreeRTOS 源碼下載地址
1、官方文檔提供了 ? 函數(shù) ?用來(lái)查詢(xún) ?任務(wù) 剩余 ? 棧 空間,首先是看官方的文檔解釋(某位大神 翻譯 的?官方文檔。)
參數(shù)解釋:?? ? xTask:被查詢(xún)?nèi)蝿?wù)的句柄——欲知如何獲得任務(wù)句柄,詳情請(qǐng)參見(jiàn)API 函數(shù)xTaskCreate()的參數(shù)pxCreatedTask。如果傳入 NULL 句柄,則任務(wù)查詢(xún)的是自身?xiàng)?臻g的高水線。
返回值:?任務(wù)棧空間的實(shí)際使用量會(huì)隨著任務(wù)執(zhí)行和中斷處理過(guò)程上下浮動(dòng)。uxTaskGetStackHighWaterMark()返回從任務(wù)啟動(dòng)執(zhí)行開(kāi)始的運(yùn)行歷史中,棧空間具有的最小剩余量。這個(gè)值即是棧空間使用達(dá)到最深時(shí)的剩下的未使用的棧空間。這個(gè)值越是接近0,則這個(gè)任務(wù)就越是離棧溢出不遠(yuǎn)了。
?
?
下面要說(shuō)我的 使用方法:?
? 首先 在 創(chuàng)建任務(wù)的時(shí)候 得 添加任務(wù)句柄:
具體方法是:
1、xTaskHandle?pvCreatedTask_ToggleLed4; //這句代碼 是定義一個(gè) 空指針變量。(typedef void * xTaskHandle;)
2、xTaskCreate(ToggleLed4, (int8_t *)"LED4", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO,&pvCreatedTask_ToggleLed4);//創(chuàng)建一個(gè)任務(wù)
3、要使用uxTaskGetStackHighWaterMark?這個(gè)函數(shù),首先得看下面說(shuō)明:
* INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for
* this function to be available.
意思是在FreeRTOS.h(英文描述錯(cuò)誤,實(shí)際在這個(gè)FreeRTOS.h中)文件中要 把?INCLUDE_uxTaskGetStackHighWaterMark的宏定義改為1,不能改的,修改一下文檔的屬性,把只讀去掉!
?
2018年8月8日14:06:45,注,不是源文檔描述錯(cuò)誤,是我理解錯(cuò)誤,應(yīng)該修改配置文件 FreeRTOSConfig.h,在該文件中 增加 宏定義 #define?INCLUDE_uxTaskGetStackHighWaterMark 1。
?
4、//下面就是我要查詢(xún)的 任務(wù) 剩余的棧空間,里面調(diào)用了uxTaskGetStackHighWaterMark?這個(gè)函數(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,串口檢測(cè),2015年11月17日11:26:42
vTaskDelay(500);
}
}
5、看 結(jié)果:
?
6、分析:
? ? ? ? ?1、這里的 ?“74”,應(yīng)該就是 ?74*4=296個(gè) 字節(jié)(1字節(jié)=8位),因?yàn)?freertos 在設(shè)置棧的時(shí)候是按照 “字”計(jì)算的,在STM32中一個(gè)字是32位!
? ? ? ???2、根據(jù) 返回的數(shù)據(jù)判斷,這個(gè)任務(wù) 還剩余 296個(gè)字節(jié)沒(méi)有使用。
?3、configMINIMAL_STACK_SIZE==128,還剩余74,就是已經(jīng)使用等于128-74=54,那么設(shè)置任務(wù)棧的時(shí)候應(yīng)該設(shè)置(已經(jīng)使用*2)即54*2=108合適,即2倍合適(參考),2017年11月7日08:56:24.
?
7、2016年11月28日17:25:23,可以通過(guò)API 直接看系統(tǒng)的運(yùn)行情況,進(jìn)行可視化調(diào)試,這里推薦一個(gè)大神的博客!
朱工:http://blog.csdn.net/zhzht19861011/article/details/50717549
總結(jié)
以上是生活随笔為你收集整理的FreeRTOS 查询任务 剩余的栈空间的 方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cortex-M3 的SVC、PendS
- 下一篇: qt中moc的作用