新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > DIY:給單片機寫個實時操作系統(tǒng)內(nèi)核!

DIY:給單片機寫個實時操作系統(tǒng)內(nèi)核!

作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
為了進一步把單片機的潛能發(fā)揮到極限,我一直想寫個程序把單片機的所有資源都用光,但是如果依照單道程序順序執(zhí)行的方式,很難把MCU的CPU時間都充分利用,比如使用軟件延時函數(shù)實際上就是在無謂地消耗著CPU的時間什么事情都不做,因為CPU一直在循環(huán)等待著條件結(jié)束,這相當于函數(shù)被阻塞了。

 
為了更明顯地驗證這一點,你可以在WINDOWS下打開VC6.0或其他的C語言編譯器,寫段代碼如下:

 
#include
void main(void)
{while(1) ;}

 
意思是讓CPU不做事情在等待,你猜,這句代碼會消耗掉多少CPU時間?

 
答案會根據(jù)不同機型而不同,如果是單核CPU的話,這句話會消耗掉CPU接近100%的時間!如果是雙核CPU,則只消耗掉50%左右,因為這段代碼只運行在其中一個核,另外一個核還可以做別的事情,截圖如下:


 

本文引用地址:http://m.butianyuan.cn/article/201611/323486.htm

然后你可以測試下面這幾句代碼:

#include

#include

void main(void)
{while(1)
Sleep(100);
}

 
這段代碼實際上也是什么都不做,它不斷地調(diào)用Sleep()函數(shù),讓它延時100毫秒再醒來,然后繼續(xù)睡覺?,F(xiàn)在你可以再打開任務(wù)管理器看一下CPU時間用了多少,答案是基本不用CPU時間??!

 
為什么同樣地什么事情都不做,差別咋就這么大呢?這是因為使用了Sleep()這個函數(shù)是WINDOWS操作系統(tǒng)為你提供的,調(diào)用Sleep()之后 WINDOWS操作系統(tǒng)自動把你這個程序掛起了(就是暫時扔到一邊不管),然后讓CPU去執(zhí)行其他程序,等到時間到了,操作系統(tǒng)再把這段程序恢復繼續(xù)執(zhí)行,這樣的話CPU就可以得到充分地利用了,也就是說你可以在一塊CPU里面“同時”執(zhí)行多個任務(wù)而互不影響!(這里所說的“同時”并不是同時執(zhí)行,CPU每一時刻只能做一件事,但如果速度足夠快的話就可以讓人感到它是在同時執(zhí)行多項任務(wù)了)。是的,操作系統(tǒng)就是為了解決多任務(wù)執(zhí)行而生的。既然操作系統(tǒng)這么神奇,可不可以讓單片機也來爽一把呢?答案是肯定的。下面就介紹如何給單片機寫個操作系統(tǒng)!!

 
/************************************************************************************/
工欲善其事,必先利其器,為了寫出操作系統(tǒng),必須得有一定的理論以及技術(shù)基礎(chǔ),
單片機方面的可以http://www.51hei.com了解到,從下面是所需的材料:
//1 C語言編程基礎(chǔ) :三斤
//2 數(shù)據(jù)結(jié)構(gòu)理論 :一斤八兩
//3 操作系統(tǒng)原理 :兩斤三兩八錢
//4 計算機組成原理以及單片機原理及應(yīng)用 :兩斤半
//5 匯編語言編程基礎(chǔ) :一斤四兩
//6 一份堅持的心 :多少斤自己掂量掂量,呵呵
/*************************************************************************************/

 
這么多怎么學?去哪學?下面是我個人推薦的書單,僅供參考:

 
1. C語言是必須要會的,而且要熟練,諸如”預編譯命令“你必須要懂,模塊化編程必須要熟悉,指針是C語言的一大精髓,在操作系統(tǒng)源碼里面指針是滿天飛的,所以得有足夠的理論基礎(chǔ),推薦國外的《C Primer Plus》 美國 Stephen Prata著,里面講的內(nèi)容由淺到深,語言引人入勝,大二開始看,現(xiàn)在還時不時地要回頭看,確實是一本不錯的好書:

另外,學會了C的基本語法之后你還得要會一點點編程技巧以及編程要注意的問題之類的,推薦有空的話多看看《C專家編程》和《C陷阱與缺陷》,這兩本書是C編程領(lǐng)域里面的經(jīng)典之作,相信看完你的功力會大有長進,但是還是要以經(jīng)常敲代碼為主:

2. 操作系統(tǒng)里面的數(shù)據(jù)組織形式都是以數(shù)據(jù)結(jié)構(gòu)的理論為基礎(chǔ)的,所以你得懂得數(shù)據(jù)結(jié)構(gòu)才能看懂里面的含義,但也不要求把數(shù)據(jù)結(jié)構(gòu)全精通,推薦嚴蔚敏版本的《數(shù)據(jù)結(jié)構(gòu)》,不過里面的算法都是用偽代碼寫出來的:

3. 有了編程基礎(chǔ)之后你還必須要懂得操作系統(tǒng)的基本原理,比如任務(wù)之間是怎么切換的,內(nèi)存是怎么管理的都得懂,推薦《操作系統(tǒng)-精髓與設(shè)計原理》


上一頁 1 2 3 4 下一頁

評論


技術(shù)專區(qū)

關(guān)閉