FreeRTOS任務狀態資訊查詢

2022-03-18 22:09:33 字數 3189 閱讀 5871

使用舉例

/*

* ubasetype_t uxtaskgetnumberoftasks( void )

* ubasetype_t uxtaskgetsystemstate( taskstatus_t * const pxtaskstatusarray,

* const ubasetype_t uxarraysize, uint32_t * const pultotalruntime )

*/taskstatus_t *statusarray;

ubasetype_t task_num;

task_num=uxtaskgetnumberoftasks(); //獲取系統任務數量

printf("uxtaskgetnumberoftasks %d\r\n", task_num);

statusarray=pvportmalloc(task_num*sizeof(taskstatus_t));//申請記憶體

if(statusarray!=null) //記憶體申請成功

}vportfree(statusarray); //釋放記憶體

實驗現象

uxtaskgetnumberoftasks 5

taskname priority tasknumber

query_task 3

5

led0_task 2

4

idle 0

2

start_task 1

1

tmr svc 31

3

使用舉例

/*

* taskhandle_t xtaskgethandle( const char *pcnametoquery )

* void vtaskgetinfo( taskhandle_t xtask, taskstatus_t *pxtaskstatus,

* basetype_t xgetfreestackspace, etaskstate estate )

*/taskhandle_t taskhandle;

taskstatus_t taskstatus;

taskhandle=xtaskgethandle("led0_task"); //根據任務名獲取任務控制代碼

//獲取led0_task的任務資訊

vtaskgetinfo((taskhandle_t )taskhandle, //任務控制代碼

(taskstatus_t* )&taskstatus, //任務資訊結構體

(basetype_t )pdtrue, //允許統計任務堆疊歷史最小剩餘大小

(etaskstate )einvalid); //函式自己獲取任務執行壯態

printf("任務名: %s\r\n",taskstatus.pctaskname);

printf("任務編號: %d\r\n",(int)taskstatus.xtasknumber);

printf("任務壯態: %d\r\n",taskstatus.ecurrentstate);

printf("任務當前優先順序: %d\r\n",(int)taskstatus.uxcurrentpriority);

printf("任務基優先順序: %d\r\n",(int)taskstatus.uxbasepriority);

printf("任務堆疊歷史剩餘最小值: %d\r\n",taskstatus.usstackhighwatermark);

實驗現象

任務名:                led0_task

任務編號: 4

任務壯態: 2

任務當前優先順序: 2

任務基優先順序: 2

任務堆疊歷史剩餘最小值: 108

使用舉例

/*

* etaskstate etaskgetstate( taskhandle_t xtask )

*/typedef

enum

etaskstate;

taskhandle=xtaskgethandle("query_task"); //根據任務名獲取任務控制代碼

taskstate=etaskgetstate(taskhandle); //獲取query_task任務的任務壯態

switch((int)taskstate)

printf("任務壯態值:%d,對應的壯態為:%s\r\n",taskstate,taskinfo);

實驗現象

任務壯態值:0,對應的壯態為:running
使用舉例

/*

* void vtasklist( char * pcwritebuffer )

*/vtasklist(infobuffer); //獲取所有任務的資訊

printf("%s\r\n",infobuffer);

實驗現象

query_task      r   3

1925

idle r 0

1082

led0_task b 2

1084

tmr svc s 31

2363

FreeRTOS任務切換

任務切換一共兩種方式 系統節拍器中斷 呼叫portyield。但是,最終都是產生pendsv中斷。systick異常處理入口 void xportsystickhandler void 開啟中斷 vportclearbaseprifromisr 請求排程 define portyield 系統節拍器...

FreeRTOS空閒任務

空閒任務在啟動排程器的時候被建立 啟動排程器 void vtaskstartscheduler void else endif if xreturn pdpass else else 空閒任務的作用包括 保證系統至少有乙個任務在執行 檢查等待終結列表中是否有任務並釋放它們。空閒任務 static p...

FreeRTOS 任務管理

1.freertos 任務不允許以任何方式從實現函式中返回 他們絕不能有一條 return 語句,也不可能執行到函式的末尾。如果乙個函式不需要,可以將其刪除,如在任務中使用函式vtaskdelete null 將當前任務刪除。2.在啟動任務排程器 oskernelstart 前,最好只建立乙個起始任...