μC/OS、RTT等大多數(shù)實時內(nèi)核都是搶占式的,準備運行的最高優(yōu)先級任務始終被賦予 CPU 控制權(quán)。
當一個任務使更高優(yōu)先級的任務準備好運行時,當前任務被搶占(掛起)并且更高優(yōu)先級的任務立即獲得 CPU 的控制權(quán)。
如果 ISR 使更高優(yōu)先級的任務準備就緒,當 ISR 完成時,被中斷的任務被掛起并恢復新的更高優(yōu)先級任務。
(1) 任務正在執(zhí)行但被中斷。(2) 如果中斷被使能,CPU 向量(跳轉(zhuǎn))到 ISR。(3) ISR 處理事件并使更高優(yōu)先級的任務準備好運行。ISR 完成后,調(diào)用內(nèi)核提供的服務(即調(diào)用內(nèi)核提供的函數(shù))。(4) & (5) 該函數(shù)知道一個更重要的任務已經(jīng)準備好運行,因此內(nèi)核將執(zhí)行上下文切換并執(zhí)行更重要的代碼而不是返回到被中斷的任務任務。當更重要的任務完成時,內(nèi)核提供的另一個函數(shù)被調(diào)用,讓任務進入休眠狀態(tài),等待事件(即 ISR)發(fā)生。(6) & (7) 然后內(nèi)核“看到”需要執(zhí)行一個較低優(yōu)先級的任務,并完成另一個上下文切換以恢復被中斷任務的執(zhí)行。
使用搶占式內(nèi)核,最高優(yōu)先級任務的執(zhí)行是確定性的;你可以確定它何時可以控制 CPU。因此,通過使用搶占式內(nèi)核可以最大限度地減少任務級響應時間。
使用搶占式內(nèi)核的應用程序代碼不應使用不可重入函數(shù),除非通過使用互斥信號量確保對這些函數(shù)的獨占訪問,因為低優(yōu)先級和高優(yōu)先級任務都可以使用公共函數(shù)。如果較高優(yōu)先級的任務搶占正在使用該功能的較低優(yōu)先級的任務,則可能會發(fā)生數(shù)據(jù)損壞。
總而言之,搶占式內(nèi)核始終執(zhí)行準備運行的最高優(yōu)先級任務。中斷搶占任務,完成 ISR 后,內(nèi)核將繼續(xù)執(zhí)行準備運行的最高優(yōu)先級任務(而不是被中斷的任務)。任務級別的響應是最佳的和確定性的,當系統(tǒng)響應性很重要時,建議使用搶占式內(nèi)核。
-
內(nèi)核
+關注
關注
3文章
1363瀏覽量
40228 -
cpu
+關注
關注
68文章
10826瀏覽量
211162 -
函數(shù)
+關注
關注
3文章
4307瀏覽量
62434 -
RTT
+關注
關注
0文章
65瀏覽量
17088 -
ISR
+關注
關注
0文章
38瀏覽量
14408
發(fā)布評論請先 登錄
相關推薦
評論