互聯(lián)網(wǎng)app網(wǎng)站建設(shè)方案模板下載霸榜seo
freeRTOS 任務(wù)是怎么調(diào)度的?
在 freeRTOS 中,任務(wù)調(diào)度主要是基于優(yōu)先級(jí)的搶占式調(diào)度。每個(gè)任務(wù)都有一個(gè)優(yōu)先級(jí),系統(tǒng)會(huì)根據(jù)任務(wù)的優(yōu)先級(jí)來決定哪個(gè)任務(wù)獲得 CPU 的使用權(quán)。
當(dāng)一個(gè)高優(yōu)先級(jí)的任務(wù)準(zhǔn)備運(yùn)行,并且當(dāng)前運(yùn)行的任務(wù)優(yōu)先級(jí)較低時(shí),高優(yōu)先級(jí)任務(wù)會(huì)搶占 CPU。例如,假設(shè)有任務(wù) A 優(yōu)先級(jí)為 3,任務(wù) B 優(yōu)先級(jí)為 2,當(dāng)任務(wù) B 正在運(yùn)行,任務(wù) A 進(jìn)入就緒狀態(tài)時(shí),任務(wù) A 會(huì)立即搶占 CPU 開始運(yùn)行。
同時(shí),freeRTOS 也支持時(shí)間片輪轉(zhuǎn)調(diào)度。對(duì)于優(yōu)先級(jí)相同的任務(wù),系統(tǒng)會(huì)為每個(gè)任務(wù)分配一個(gè)時(shí)間片。當(dāng)一個(gè)任務(wù)的時(shí)間片用完后,會(huì)暫停該任務(wù),將 CPU 的使用權(quán)交給同優(yōu)先級(jí)的下一個(gè)任務(wù)。
任務(wù)的狀態(tài)轉(zhuǎn)換在調(diào)度過程中也很關(guān)鍵。任務(wù)可能處于就緒、運(yùn)行、阻塞等狀態(tài)。處于阻塞狀態(tài)的任務(wù)通常是在等待某些事件,比如等待一個(gè)信號(hào)量或者等待一段時(shí)間過去。當(dāng)?shù)却氖录M足后,任務(wù)會(huì)進(jìn)入就緒狀態(tài),等待調(diào)度器調(diào)度。
調(diào)度器會(huì)在系統(tǒng)滴答定時(shí)器(SysTick)的中斷服務(wù)程序中檢查任務(wù)的狀態(tài)和優(yōu)先級(jí)。每次滴答定時(shí)器中斷,調(diào)度器都會(huì)決定是否需要進(jìn)行任務(wù)切換,以保證系統(tǒng)的高效運(yùn)行。
freeRTOS 可以裁剪嗎?