Freertos學習 初識任務函式

2021-06-17 22:03:52 字數 2486 閱讀 4451

1.任務建立

signed portbase_type xtaskcreate(

pdtask_code pvtaskcode, --指向任務的入口函式

const signed portchar * const pcname, --任務的名字

unsigned portshort usstackdepth, --指定任務堆疊的大小 ,堆疊能保護變數的數目-

void *pvparameters, --指標用於作為乙個引數傳向建立的任務

unsigned portbase_type uxpriority, --任務的優先順序

xtaskhandle *pxcreatedtask )--用於傳遞乙個處理

例子:xtaskcreate( startask , ( signed portchar * ) "startask ", 128, null, tskidle_priority, null );

我們先按任務建立函式設定好任務的入口名字startask ,任務名字startask ,堆疊大小128,優先順序等,然後編寫我們任務startask 的內容,下面就是任務startask函式:

void startask (void *pvparameter)

2.任務刪除

void vtaskdelete( xtaskhandle pxtasktodelete )

例子:void votherfunction( void )

注:include_vtaskdelete必須定義為1,這個函式才能可用

3.任務延時

void vtaskdelay( portticktype xtickstodelay );

例子:const portticktype xdelay = 1000/ porttick_rate_ms;

注:include_vtaskdelay必須設定為1,這個函式才為可用。

4.任務延時--延時乙個任務到指定時間

void vtaskdelayuntil(

portticktype *pxpreviouswaketime, --指定乙個變數來掌握任務最後開啟的時間,                                  這個變數在第一次使用中(參考下面的例子)必須                                    使用當前時間來初始化

portticktype xtimeincrement );--迴圈週期時間。任務將在一定時間開啟                               (*pxpreviouswaketime + xtimeincrement)

例子:void vtaskfunction( void * pvparameters )

注:include_vtaskdelayuntil 必須定義為1,此函式才能用。

5.獲取任務優先順序

unsigned portbase_type uxtaskpriorityget( xtaskhandle pxtask );

7.任務掛起或暫停

void vtasksuspend(

xtaskhandle pxtasktosuspend ); --處理需要掛起的任務。傳遞null將掛起呼叫此函式的任務。

例子:void vafunction( void )

注:設定include_vtasksuspend 為1,此函式才能使用。

8.任務恢復

void vtaskresume( xtaskhandle pxtasktoresume );

9.啟動核心

void vtaskstartscheduler( void );

必須是呼叫 vtasksuspend () 後掛起的任務,才有可能通過呼叫 vtaskresume ()重新執行。

例子:注:設定include_vtasksuspend為1,此函式才能使用。

void vafunction( void )

例子:注:設定include_vtaskpriorityget 為1,此函式才能用。

6.設定任務優先順序

void vtaskpriorityset(

xtaskhandle pxtask, --需要設定優先順序的任務。當傳遞null,將設定呼叫任務的優先順序

unsigned portbase_type uxnewpriority );--任務需要設定的優先順序

例子: 

void vafunction( void )

注:設定include_vtaskpriorityset為1,才能使用此函式

}for( ;; )

xtickstodelay 是指延時的時間片個數,

void vafunction( void )

}

FreeRtos 空閒任務與空閒任務鉤子函式

以下基礎知識 自正點原子pdf資料。前面例子中建立的任務大部份時間都處於阻塞態。這種狀態下所有的任務都不可執行,所以也不能被排程器選中。但處理器總是需要 來執行 所以至少要有乙個任務處於執行態。為了保證這 一點,當呼叫 vtaskstartscheduler 時,排程器會自動建立乙個空閒任務。空閒任...

FreeRTOS任務切換

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

FreeRTOS空閒任務

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