從RT-Thread中我們能學到什麼?

從RT-Thread中我們能學到什麼?

12 人贊了文章

本文將為大家簡要介紹一下筆者使用和學習RT-Thread過程中的體會和感悟,希望能幫助初識RT-Thread的人建立一個初步的印象,避免產生入寶山而空回的遺憾。筆者水平有限,目前也正在學習和使用RT-Thread的過程中,希望本文的拙見能拋磚引玉,如有紕漏,還請不吝賜教。

現在是一個快節奏的時代,技術領域也是如此。近些年,IoT備受資本青睞,各種新技術新方案層出不窮,質量也參差不齊,這邊唱罷那邊登台,以至於有些技術還未被人熟知,就被淹沒在長河中了。客觀的說,RTOS領域玩家眾多,僅筆者短短的從業時間,國產RTOS就聽聞了五、六款之多。

RT-Thread作為一個有十餘年歷史的國產RTOS,經歷了長時間的考驗和用戶的青睞,目前發展趨勢蒸蒸日上,也即將發布RT-Thread 3.0,其中必然有值得我們思考和學習的地方,我們也可以從中汲取到不少寶貴的經驗。

軟體工程管理

軟體工程管理對於軟體研發是十分重要的,甚至可以說是開發過程的基石。公司中有高水平的嵌入式軟體程序員,也有剛入職的實習生,水平難免參差不齊,當共同協作開發一個項目時,如何彼此協調也是一個難題。

時至今日,很多公司仍然在使用落後的代碼管理方式。有些甚至使用把代碼壓縮成一個個的壓縮包來做版本管理。同事之間的協作依靠互相發送文件,每次接收到同事的新文件首先要花半天時間解決編譯error,甚至還要在本地對同事的代碼進行修改,這樣,軟體基本處在半失控的狀態,某次改動產生問題,就要從浩瀚的壓縮包海洋里挑選一個,進行版本回退。在開發一個大項目的時候,這種情況下甚至會出現人數越多,開發難度和周期越大的情況。

而RT-Thread,提供了一個教科書級的範例。RT-Thread由13000多個文件構成,支持各類設備和晶元近70款,從代碼量和組織方式上來說,是一個相當龐大的軟體工程。在近十年的時間裡,至少有將近100個開發者參與到了RT-Thread的開發中,使得RT-Thread穩步迭代,而這也是有一定的維護難度的。RT-Thread將代碼部署在Github上,並在此基礎上使用了Travis CI進行自動化編譯測試,使得開發者可以有條不紊的進行迭**發,並將自己的成果提交至master分支,在提交代碼的第一時間通過Travis CI進行自動化編譯測試,使得一些無法編譯通過的問題,在第一時間就被發現。

RT-Thread使用scons自動化代碼構建工具。初識RT-Thread,很難想像RT-Thread通過一個代碼倉庫,對近70個晶元的IAR、MDK和GCC的工程和工具鏈提供支持。RT-Thread使用了scons,使得只要敲幾行指令,就可以生成所需環境和工具鏈的對應的工程。也就是說,對於大多數晶元,所謂移植RT-Thread,只需要幾個scons指令進行自動化構建。我相信對於大多數中小公司的軟體項目,無論從規模還是參與人數都沒有RT-Thread這麼龐大,維護難度也遠小於RT-Thread。但儘管如此,工程維護也是軟體工程管理的老大難問題,無疑,從RT-Thread中,我們可以借鑒不少經驗。

代碼風格與技術

RT-Thread的代碼風格是十分優秀的。在工作中,很多時候嵌入式軟體工程師尤其是單片機軟體工程師使用的晶元資源相對比較匱乏,RAM和ROM也略顯局促,節省資源也成了優先順序比較高的事情,而這也成了許多工程師代碼不規範的借口。魯棒性、模塊化、可拓展、高內聚、低耦合,這種高大上的名詞總是不絕於耳,相信大家也在各種場景下聽過不少次。可拋去這些高大上的名詞,到底什麼才是優秀的代碼呢?

RT-Thread雖然沒有強調過這些高大上的名詞,但是他毫無疑問用代碼對這些名詞進行了解釋。RT-Thread的代碼風格是類Linux/Unix的代碼風格。這種風格不僅僅體現在函數、變數的命名規範,而是深入到了RT-Thread的核心。例如,RT-Thread實現了一個設備驅動框架,將設備類型分為了字元設備、塊設備、網路介面設備、內存設備、CAN設備、RTC設備、聲音設備、圖形設備、I2C匯流排設備等等等等。初始化時通過字元串(用戶可自定義的一個易於記憶的名稱)與設備驅動綁定,並將驅動註冊到內核,使用時只需調用一個字元串,即可匹配到該設備,無需通過各種頭文件包含和二次封裝,即可實現隔離和解耦。

RT-Thread提供了Finsh和msh組件,這是非常有特色組件,可以在調試和開發中與系統內核進行便捷的交互,使用十分方便。如何在資源緊缺的嵌入式軟體開發中,寫出優秀的代碼,RT-Thread十分值得我們思考和學習。

開源精神

RT-Thread是國內第一梯隊的嵌入式開源項目,也正因為開源和社區化,RT-Thread得以茁壯發展,並在開發人員中贏得了極高的口碑,有不小數量的開發者參與到了RT-Thread的開發中。RT-Thread實時操作系統遵循GPLv2+許可證,實時操作系統內核及所有開源組件可以免費在商業產品中使用,不需要公布應用源碼,沒有任何潛在商業風險。這種開源精神十分令人欽佩。

得益於RT-Thread的開源,我們可以將自己的代碼提交,經過審核後合併至master分支,在使用過程中,當某個模塊出現疑問或問題,可以直接與開發者甚至創始人直接進行討論,這種體驗是十分奇妙,也是其他RTOS所不具備的。

RT-Thread倡導大家參與RT-Thread開發的代碼編寫、bug修復、文檔完善等等各項進程中。而實際上一旦自己提交的東西被採納和合併,也是一件十分有成就感的事情。

我們也可以學習RT-Thread的開源精神,將自己業餘時間的代碼開源,或者積极參与到開源項目中,在方便大家使用的同時,通過進行更廣泛的討論,也相當於有了更多的人幫助review,接受大家的批評和建議,實現自己更快的進步。

一些思考

現在大家都十分渴望成功,並且渴望快速成功。在各種融資奇蹟下,漸漸地,大家希望,趁著風口,激進地在短時間內完成一款產品,然後借著風口一飛衝天。也漸漸地,失去了精心打磨耕耘一個產品的耐心。RT-Thread在數千萬裝機量和獲得天使輪近千萬融資的背後是十年如一日的細心耕耘和精心呵護。

RT-Thread的創始人熊譜翔先生,起初是在2005年,面對RTOS現狀,利用業餘時間開發RT-Thread。我想熊譜翔先生的初心也僅僅是想做一款真正優秀的實時操作系統吧。如同《三傻大鬧寶萊塢》中,蘭徹達斯所說:「追求卓越,成功就會在不經意間追上你」。


推薦閱讀:

TAG:RTThread | 物聯網 |