新聞中心

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

DIY:給單片機(jī)寫(xiě)個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核!

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

 
為了更明顯地驗(yàn)證這一點(diǎn),你可以在WINDOWS下打開(kāi)VC6.0或其他的C語(yǔ)言編譯器,寫(xiě)段代碼如下:

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

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

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


 

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

然后你可以測(cè)試下面這幾句代碼:

#include

#include

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

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

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

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

 
這么多怎么學(xué)?去哪學(xué)?下面是我個(gè)人推薦的書(shū)單,僅供參考:

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

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

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

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


上一頁(yè) 1 2 3 4 下一頁(yè)

評(píng)論


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

關(guān)閉