FreeRTOS系列第1篇---為什么選擇FreeRTOS?
1.為什么學(xué)習(xí) RTOS?
作為基于 ARM7、Cortex-M3 硬件開發(fā)的嵌入式工程師,我一直反對使用 RTOS。不僅因?yàn)椴磺‘?dāng)?shù)氖褂?RTOS 會給項(xiàng)目帶來額外的穩(wěn)定性風(fēng)險(xiǎn),更重要的是我認(rèn)為絕大多數(shù)基于 ARM7、Cortex-M3 硬件的項(xiàng)目,還沒復(fù)雜到使用 RTOS 的地步,使用狀態(tài)機(jī)就足夠了。
對于現(xiàn)代的微處理器,特別是資源相對豐富 ARM7、Cortex-M3 硬件來說,RTOS 占用的硬件資源已經(jīng)越來越可以忽略。所以在當(dāng)今環(huán)境下,我們無需擔(dān)心 RTOS 會拖累性能。相反,RTOS 提供的事件驅(qū)動型設(shè)計(jì)方式,使得 RTOS 只是在處理實(shí)際任務(wù)時(shí)才會運(yùn)行,這能夠更合理的利用 CPU。在實(shí)際項(xiàng)目中,如果程序等待一個超時(shí)事件,傳統(tǒng)的無 RTOS 情況下,要么在原地一直等待而不能執(zhí)行其它任務(wù),要么使用復(fù)雜(相對 RTOS 提供的任務(wù)機(jī)制而言)的狀態(tài)機(jī)機(jī)制。如果使用 RTOS,則可以很方便的將當(dāng)前任務(wù)阻塞在該事件下,然后自動去執(zhí)行別的任務(wù),這顯然更方便,并且可以高效的利用 CPU。處理這類事件,是我使用 RTOS 的最大動力,但考慮到系統(tǒng)的穩(wěn)定性,我不得不再三權(quán)衡 RTOS 可能帶來的一些弊端:
-
大多數(shù) RTOS 代碼都具有一定規(guī)模,任何代碼都可能帶來 BUG,何況是代碼具有一定規(guī)模的 RTOS,因此引入 RTOS 的同時(shí)也可能會引入該 RTOS 的 BUG,這些 RTOS 本身的 BUG 一旦被觸發(fā),影響可能是是災(zāi)難性的。 -
熟練的使用 RTOS 是一項(xiàng)技能,需要專業(yè)的知識儲備和長期的經(jīng)驗(yàn)積累。不將 RTOS 分析透徹,很容易為項(xiàng)目埋下錯誤。典型的,像中斷優(yōu)先級、任務(wù)堆棧分配、可重入等,都是更容易出錯的地方。 -
RTOS 的優(yōu)先級嵌套使得任務(wù)執(zhí)行順序、執(zhí)行時(shí)序更難分析,甚至變成不可能。任務(wù)嵌套對所需的最大堆棧 RAM 大小估計(jì)也變得困難。這對于很多對安全有嚴(yán)格要求的場合是不可想象的。 -
RTOS 應(yīng)該用于任務(wù)復(fù)雜的場合,以至于對任務(wù)調(diào)度的需求可以抵消 RTOS 所帶來的穩(wěn)定性影響,但大部分的應(yīng)用并非復(fù)雜到需要 RTOS。
以上原因是我拒絕在實(shí)際項(xiàng)目中使用 RTOS 的理由,但是否使用 RTOS 跟是否學(xué)習(xí) RTOS 完全是兩碼事。我認(rèn)為任何嵌入式軟件設(shè)計(jì)人員都應(yīng)該至少學(xué)習(xí)一種 RTOS,不僅是需要掌握 RTOS 背后的操作系統(tǒng)原理、學(xué)習(xí) RTOS 的編程方式,更是為將來做準(zhǔn)備。
即便我認(rèn)為現(xiàn)在的物聯(lián)網(wǎng)有點(diǎn)言過其實(shí),但我依然看好物聯(lián)網(wǎng)的發(fā)展前景。隨著物聯(lián)網(wǎng)的發(fā)展,未來的嵌入式產(chǎn)品必然更為復(fù)雜、連接性更強(qiáng)以及需要更豐富的用戶界面。當(dāng)處理這些任務(wù)時(shí),一個好的 RTOS 就變得不可缺少了。
書到用時(shí)方恨少,我希望自己永遠(yuǎn)不會有這種感覺。所以從現(xiàn)在起,我要開始深入一個 RTOS,探索它背后的原理,掌握其編程方法,避免其缺陷和陷阱,并將它安全的用在將來的項(xiàng)目中。
2.為什么選用 FreeRTOS?
對比了許多 RTOS,最終選擇 FreeRTOS,原因是多方面的:
-
SafeRTOS 便是基于 FreeRTOS 而來,前者是經(jīng)過安全認(rèn)證的 RTOS,因此對于 FreeRTOS 的安全性也有了信心。 -
大量開發(fā)者使用,并保持高速增長趨勢。2011、2012、2013、2014、2015、2017 年(暫時(shí)沒有 2016 年的數(shù)據(jù))的 EEtimes 雜志嵌入式系統(tǒng)市場報(bào)告顯示,F(xiàn)reeRTOS 在 RTOS 內(nèi)核使用榜和 RTOS 內(nèi)核計(jì)劃使用榜上都名列前茅。更多的人使用可以促進(jìn)發(fā)現(xiàn) BUG,增強(qiáng)穩(wěn)定性。 -
簡單。內(nèi)核只有 3 個.c 文件,全部圍繞著任務(wù)調(diào)度,沒有任何其它干擾,便于理解學(xué)習(xí)。而且,我根本不需要其它繁多的功能,只要任務(wù)調(diào)度就夠了。 -
文檔齊全。在 FreeRTOS 官方網(wǎng)站上,可以找到所有你需要的資料。 -
免費(fèi)、開放源碼。完全可以免費(fèi)用于商業(yè)產(chǎn)品,開放源碼更便于學(xué)習(xí)操作系統(tǒng)原理、從全局掌握 FreeRTOS 運(yùn)行機(jī)理、以及對操作系統(tǒng)進(jìn)行深度裁剪以適應(yīng)自己的硬件。 -
2017 年底,F(xiàn)reeRTOS 作者加入亞馬遜,擔(dān)任首席工程師,F(xiàn)reeRTOS 也由亞馬遜管理。同時(shí)修改了用戶許可證,F(xiàn)reeRTOS 變得更加開放和自由。背靠亞馬遜,相信未來 FreeRTOS 會更加穩(wěn)定可靠。此外,以前價(jià)格不菲的《實(shí)時(shí)內(nèi)核指南》和《參考手冊》也免費(fèi)開放下載,這使得學(xué)習(xí)更加容易。
學(xué)習(xí)的資料來源主要是 FreeRTOS 的官方網(wǎng)站(www.freertos.org)和源代碼。FreeRTOS 的創(chuàng)始人 RichardBarry 編寫了大量的移植代碼和配套文檔,我只不過是沿著 Richard Barry 鋪好的路前進(jìn),所以,這沒什么困難的。
最后,感謝 RichardBarry 的付出,感謝 Richard Barry 的無私開源精神!
附錄 1:
2010~2017 年 EEtimes 雜志嵌入式市場調(diào)查報(bào)告有關(guān) RTOS 使用榜截圖
-
附錄 1.1 2010 和 2011 年 RTOS 使用榜
-
附錄 1.2 2012 和 2013 年 RTOS 使用榜
-
附錄 1.3 2013 年和 2014 年 RTOS 使用榜
-
附錄 1.4 2014 年和 2015 年 RTOS 使用榜
-
附錄 1.5 2017 年 RTOS 使用榜
本文已獲取「CSDN」作者獨(dú)家授權(quán),請勿二次轉(zhuǎn)載,請獲取作者授權(quán)。
聲明:本公眾號授權(quán)轉(zhuǎn)載本文僅傳播相關(guān)知識,無任何盈利和商業(yè)行為,部分內(nèi)容有刪改。
原文地址:https://blog.csdn.net/zhzht19861011/article/details/49819109
作者:zhzht19861011
推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
【編程之美】用C語言實(shí)現(xiàn)狀態(tài)機(jī)(實(shí)用)
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!