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 時,排程器會自動建立乙個空閒任務。空閒任...