久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > DIY:給單片機寫個實時操作系統內核!

DIY:給單片機寫個實時操作系統內核!

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

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

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

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

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


 

本文引用地址:http://cqxgywz.com/article/201611/323486.htm

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

#include

#include

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

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

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

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

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

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

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

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

3. 有了編程基礎之后你還必須要懂得操作系統的基本原理,比如任務之間是怎么切換的,內存是怎么管理的都得懂,推薦《操作系統-精髓與設計原理》


上一頁 1 2 3 4 下一頁

評論


技術專區

關閉