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