如何學(xué)習(xí)一個(gè)嵌入式系統(tǒng)?學(xué)這些精髓!
時(shí)間:2021-10-13 14:09:13
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]關(guān)注「Linux大陸」,一起進(jìn)步!這個(gè)是在網(wǎng)上看到的一篇文檔,作者的目的是設(shè)計(jì)一個(gè)簡(jiǎn)單的嵌入式操作系統(tǒng),只實(shí)現(xiàn)一個(gè)基本任務(wù)調(diào)度器的功能。正如作者所說(shuō),雖然不能稱為操作系統(tǒng),但已體現(xiàn)了小型嵌入式操作系統(tǒng)的精髓。對(duì)于我們來(lái)說(shuō)是很好的學(xué)習(xí)資料,可以從中一窺操作系統(tǒng)的面目,今天分享給大家...
關(guān)注「Linux大陸」,一起進(jìn)步! 這個(gè)是在網(wǎng)上看到的一篇文檔,作者的目的是設(shè)計(jì)一個(gè)簡(jiǎn)單的嵌入式操作系統(tǒng),只實(shí)現(xiàn)一個(gè)基本任務(wù)調(diào)度器的功能。正如作者所說(shuō),雖然不能稱為操作系統(tǒng),但已體現(xiàn)了小型嵌入式操作系統(tǒng)的精髓。對(duì)于我們來(lái)說(shuō)是很好的學(xué)習(xí)資料,可以從中一窺操作系統(tǒng)的面目,今天分享給大家。
多任務(wù)機(jī)制
其實(shí)在單一CPU 的情況下,是不存在真正的多任務(wù)機(jī)制的,存在的只有不同的任務(wù)輪流使用CPU,所以本質(zhì)上還是單任務(wù)的。但由于CPU執(zhí)行速度非???,加上任務(wù)切換十分頻繁并且切換的很快,所以我們感覺(jué)好像有很多任務(wù)同時(shí)在運(yùn)行一樣。這就是所謂的多任務(wù)機(jī)制
。實(shí)時(shí)系統(tǒng)的特征是延時(shí)可預(yù)測(cè),能夠在一個(gè)規(guī)定的時(shí)間內(nèi)(通常是 ms 級(jí)別的)對(duì)某些信號(hào)做出反應(yīng)。任務(wù)的狀態(tài)
任務(wù)有下面的特性:任務(wù)并不是隨時(shí)都可以運(yùn)行的,而一個(gè)已經(jīng)運(yùn)行的任務(wù)并不能保證一直占有 CPU 直到運(yùn)行完。一般有就緒態(tài),運(yùn)行態(tài),掛起態(tài)等。- 運(yùn)行態(tài):一個(gè)運(yùn)行態(tài)的任務(wù)是一個(gè)正在使用 CPU 的任務(wù)。任何時(shí)刻有且只有一個(gè)運(yùn)行著的任務(wù)。
- 就緒態(tài):一個(gè)就緒態(tài)任務(wù)是可運(yùn)行的,等待占有 CPU 的任務(wù)釋放 CPU。
- 掛起態(tài):某些條件不滿足而掛起不能運(yùn)行的狀態(tài)。
如何轉(zhuǎn)化為就緒態(tài)
INT32U?OSRdyTbl;?/*?就緒任務(wù)表?*/
上面定義一個(gè) 32 位變量,每一位代表一個(gè)任務(wù),0 表示掛起狀態(tài),1 表示就緒狀態(tài)。它記錄了各任務(wù)的就緒與否狀態(tài),稱它為 就緒表
。OSRdyTbl 定義為 32 位變量,對(duì)應(yīng)32 個(gè)任務(wù)。當(dāng)然,定義為 64 位的話,便最多能支持 64 個(gè)任務(wù)。這樣,可以定義兩個(gè)宏,實(shí)現(xiàn)把任務(wù)的狀態(tài)變?yōu)榫途w或掛起態(tài)。/*?在就緒表中登記就緒任務(wù)?*/
#define?OSSetPrioRdy(prio)?{?OSRdyTbl?|=?0x01/把相應(yīng)位置1
/*?從就緒表中刪除任務(wù)?*/
#define?OSDelPrioRdy(prio)?{?OSRdyTbl?