freeRTOS 空閒任務與阻塞延時 1

2021-10-07 13:32:43 字數 1838 閱讀 5749

rtos中的延時是在需要延時的時間內任務放棄cpu的使用權,超過延時時間後重新獲得cpu的使用權。叫做:阻塞延時。

**空閒任務是在啟動排程器後建立的,是cpu空閒時候執行的,是優先順序最低的。空閒任務主要做一些清理記憶體的的任務。**空閒任務是不允許阻塞的。

如何實現空閒任務?

1.在main.c定義空閒任務棧。

首先在freertos中定義空閒任務棧最小的任務棧大小(單位是 :字):

#define configminimal_stack_size             ((unsigned short)  128)  

//單位是 字

然後在main.c中獲取空閒任務的記憶體:

// 獲取空閒任務的記憶體

stacktype_t idletaskstack[configminimal_stack_size]

;

2.main.c中定義空閒任務的任務控制塊。

tcb_t idletasktcb;
idle 是空閒的意思。

3.在task.c中定義空閒任務函式主體。

#define porttask_function(prvidletask,  pvparameters)   void vfunction(void *pvparameters)

static

porttask_function

(prvidletask, pvparameters)

}

4.在task.c的排程器函式中建立空閒任務。

void

vtaskstartscheduler

(void

)// 排程器函式

}

在main.c中定義:

void

(tcb_t *

*ppxidletasktcbbuffer,

stacktype_t *

*ppxidletaskstackbuffer,

uint32_t *pulidletaskstacksize

)

在task.c中宣告空閒任務的控制代碼;

static taskhandle_t xidletaskhandle   =

null

;

並且在task.c中宣告:

extern

void

(tcb_t *

*ppxidletasktcbbuffer,

stacktype_t *

*ppxidletaskstackbuffer,

uint32_t *pulidletaskstacksize

);

在task.c中宣告:

#define porttask_function(vfunction,pvparameters) void vfunction(void *pvparameters)
寫函式:

//空閒任務就是在這個函式中實現。

static

porttask_function

(prvidletask, pvparameters)

}

注意宣告的位置。我寫**的時候很多次因為宣告的位置上不正確而報錯。

如果有錯誤,歡迎批評指正!

歡迎交流學習!

完。

FreeRTOS 空閒任務與阻塞延遲實現

在裸機執行中,我們是使用軟體延時來實現延時的功能 delay 即是讓cpu空等來達到延時的目的。使用rtos的很大優勢就是榨乾cpu效能,永遠不讓他閒著,任務需要延時也就不需要讓cpu空等來實現延時的效果。rtos中的延時叫做阻塞延時,即任務需要延時的時候,任務會放棄cpu的使用權,cpu可以去幹其...

四 FreeRTOS 空閒任務與阻塞延時

4.2 實現阻塞延時 4.3 systick 中斷服務 4.4 systick 初始化 4.5 案例 4.6 實驗現象 野火 freertos 核心實現與應用開發實戰 基於stm32 在 rtos 中,任務需要延時時,不能再讓 cpu 空等來實現延時效果。rtos 中的延時稱為阻塞延時,即任務需要延...

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

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