- FreeRTOS內核實現與應用開發實戰指南:基于STM32
- 劉火良 楊森
- 1372字
- 2019-04-15 17:51:24
引言
為什么要學習RTOS
當我們進入嵌入式這個領域時,首先接觸的往往是單片機編程,單片機編程又首選51單片機來入門。這里面說的單片機編程通常都是指裸機編程,即不加入任何RTOS的編程。常用的RTOS有國外的FreeRTOS、μC/OS、RTX和國內的FreeRTOS、Huawei LiteOS和AliOS-Things等,其中,開源且免費的FreeRTOS的市場占有率最高。
在裸機系統中,所有的程序基本都是自己寫的,所有的操作都是在一個無限的大循環中實現。現實生活中的很多中小型電子產品中用的都是裸機系統,而且能夠滿足需求。但是為什么還要學習RTOS編程,要涉及一個操作系統呢?一是因為項目需求,隨著產品要實現的功能越來越多,單純的裸機系統已經不能完美地解決問題,反而會使編程變得更加復雜,如果想降低編程的難度,可以考慮引入RTOS實現多任務管理,這是使用RTOS的最大優勢;二是出于學習的需要,必須學習更高級的技術,實現更好的職業規劃,為將來能有更好的職業發展做準備,而不是一味拘泥于裸機編程。作為一個合格的嵌入式軟件工程師,學習是永遠不能停歇的,時刻都得為將來做準備。書到用時方恨少,希望當機會來臨時,你不要有這種感覺。
為了幫大家厘清RTOS編程的思路,本書會在第3章簡單地分析這兩種編程方式的區別,我們將這個區別稱為“學習RTOS的命門”,只要掌握這一關鍵內容,以后的RTOS學習可以說是易如反掌。在講解這兩種編程方式的區別時,我們主要講解方法論,不會涉及具體的代碼,即主要還是通過偽代碼來講解。
如何學習RTOS
裸機編程和RTOS編程的風格有些不一樣,而且有很多人說學習RTOS很難,這就導致想要學習的人一聽到RTOS編程就在心里忌憚三分,結果就是“出師未捷身先死”。
那么到底如何學習RTOS呢?最簡單的方法就是在別人移植好的系統上,先看看RTOS中API的使用說明,然后調用這些API實現自己想要的功能,完全不用關心底層的移植,這是最簡單、快速的入門方法。這種方法有利有弊。如果是做產品,好處是可以快速地實現功能,將產品推向市場,贏得先機;弊端是當程序出現問題時,因對RTOS不夠了解,會導致調試困難。如果想系統地學習RTOS,那么只會簡單地調用API是不可取的,我們應該深入學習其中一款RTOS。
目前市場上的RTOS,其內核實現方式差異不大,我們只需要深入學習其中一款即可。萬變不離其宗,只要掌握了一款RTOS,以后換到其他型號的RTOS,使用起來自然也是得心應手。那么如何深入地學習一款RTOS呢?這里有一個非常有效但也十分難的方法,就是閱讀RTOS的源碼,深入研究內核和每個組件的實現方式。這個過程枯燥且痛苦。但為了能夠學到RTOS的精華,還是很值得一試的。
市面上雖然有一些講解相關RTOS源碼的圖書,但如果基礎知識掌握得不夠,且先前沒有使用過該款RTOS,那么只看源碼還是會非常枯燥,并且不能從全局掌握整個RTOS的構成和實現。
現在,我們采用一種全新的方法來教大家學習一款RTOS,既不是單純地介紹其中的API如何使用,也不是單純地拿里面的源碼一句句地講解,而是從0開始,層層疊加,不斷完善,教大家如何把一個RTOS從0到1寫出來,讓你在每一個階段都能享受到成功的喜悅。在這個RTOS實現的過程中,只需要具備C語言基礎即可,然后就是跟著本書篤定前行,最后定有所成。
選擇什么RTOS
用來教學的RTOS,我們不會完全從頭寫一個,而是選取目前國內外市場占有率很高的FreeRTOS為藍本,將其抽絲剝繭,從0到1寫出來。在實現的過程中,數據類型、變量名、函數名稱、文件類型等都完全按照FreeRTOS里面的寫法,不會再重新命名。這樣學完本書之后,就可以無縫地過渡到FreeRTOS了。