

下面文章內容,源自于RT-thread創始人:熊譜翔。
1
源自“簡單、唯美”的設計理念
誕生于2006年的RT-Thread,最初源于對當時小型RTOS現狀的諸多不滿。
最令人印象深刻的是彼時不同RTOS混亂的命名風格——如果那個時候有一份類似Linux/Unix風格的小型RTOS,也許就沒有現在的RT-Thread了。
細想起來,正是這一想法成為了RT-Thread創作的一個重要契機。
長期浸潤于開源社區,我早已經習慣了Linux/Unix的風格:編程時幾乎都以小寫命名、以下劃線來連接不同的單詞——直到現在,我依然認為只有這樣的代碼閱讀起來才談得上舒服——相信很多人會有類似的感受吧。
真正開始動手后,RT-Thread試圖遵循更多Linux/Unix優雅、明快的風格——從劃分清模塊開始,一點一點理清模塊、梳理命名——力圖保持“程序的簡潔”和“脈絡的清晰”:小到變量、函數,大到源文件、模塊無一不遵守統一的風格。
只做一件事情,并把它做好,而不逾越雷池一步——Do one thing and do it well. 這也是人們常說的“簡單、唯美”。這逐漸形成了RT-Thread的設計理念,RT-Thread要做一個精致而優雅的操作系統。
2
從“0.3”到 “2.1.0”
2010.04.17 0.3.0版本
因為開源理念早就扎根于心,期待同類開發者們更多的分享、交流,所以很早的時候RT-Thread就以社區化、開放方式推進。
下面的框圖就是當時放于Goolge Code上發布的第一個版本:RT-Thread 0.3.0。后續由于Google Code關閉,轉而放到github,持續到現在(國內是放在OSChina的碼云上)。

圖一:RT-Thread 0.3.0結構框圖
0.3.0版是基礎設施的搭建階段:內核、文件系統、網絡協議棧和命令行環境的雛形在這個時候已初具端倪。
2011.12.31 1.0.0 ~ 1.2.0版本
緊接著0.3.0版的發布,0.4.0版的開發幾乎立即就開始了。
當時我們基本保持著一個穩定版本,新特性完全凍結,以bug修正為主;另一個版本,以添加新功能,向著下一個方向推進的方式進行。
通過這樣的方式可以快速推進、迭代,同時也不失穩定性及后向的兼容性。
在0.4.0版本經過數個版本迭代,成為正式版之際,我們宣布發布RT-Thread 1.0.0正式版本。
1.0.0正式版本也意味著:RT-Thread不光具備一個嵌入式實時操作系統所必需的全部基本功能,它的穩定性也達到了商用級別。
隨著RT-Thread支持的芯片和平臺越來越多,如何有效組織工程變成了一個非常棘手的問題。大多數做法是使用Makefile,但對于不同的桌面開發平臺,Makefile表現得并不那么友好(例如Windows平臺),同時Makefile變化多樣、晦澀難懂的語義也導致掌握它有一定門檻。
這個時候使用Python語言實現的scons工具進入到我們的視野中來。從服務開發者角度出發,最終基于scons搭建的RT-Thread構建系統不僅提供了Windows、Linux和MAC下統一的用戶體驗,同時也針對不同集成開發環境(IDE)按照配置情況,生成對應的工程文件,這樣開發者可以選擇最習慣,最順手的集成開發環境。
應該說RT-Thread 1.x系列已經是一個相對成熟的嵌入式實時操作系統。在一個系統平臺上開發代碼,另外一個必須要考慮的是軟件代碼的可維護性。簡單、松耦合的設計是軟件代碼可維護性的一方面,而另一方面是跨平臺的軟件代碼可維護性。如果為了實現一樣或相類似的功能,針對Linux、RTOS分別要維護兩個版本,這個工作量幾乎要翻倍了。
在最初設計時,針對文件系統、網絡協議棧,RT-Thread都希望用最標準、開放的方式提供API服務接口,甚至是RT-Thread也支持了完整的PThreads接口,使得POSIX 線程和RT-Thread 線程得以無縫結合,用戶不再需要為他的代碼額外維護另外一個版本。
抽象外設驅動,形成簡單、獨立模塊。一份BSP移植主要的工作是兩個方面,芯片架構移植和外設支持。在RT-Thread逐步的演進過程中,發現當更換芯片時,大部分外設驅動有很大一部分代碼是一樣的。例如針對串口,基本上都會有一份軟件上的環形緩沖區(RingBuffer)。這個時候把這些公共的部分提取出來,抽象封裝形成一份面向設備的驅動,而驅動底層則只需要簡單地實現芯片具體相關的操作接口(ops)就可以了。Device Drivers組件就是這樣逐漸演變出來的,到目前已經包括串口,網口,IIC,SPI,RTC,WDT,Audio,USB等一系列的抽象設備模型,為方便支持不同的芯片、板卡節省下大量的時間。
2015.02.02 2.0.0 ~ 2.1.0版本
在嵌入式市場中,實時Linux是很早的一支。但因為Linux天生架構的問題,要想獲得高實時性并沒那么容易,或者說Linux本身這套架構并不適合高實時性應用。另外市場上多核處理器(SMP對稱處理器或AMP異構處理器)也逐漸應用到嵌入式系統領域。
在這個背景下,RT-Thread也在探索如何讓RT-Thread成為Linux的有益補充。基于RT-Thread自身簡單、獨立的設計考慮,RT-Thread實現了支持雙操作系統協同工作的虛擬總線組件(VBUS),能夠讓雙方進行相互的數據通信,而并不會把一些實時性問題和Linux糾纏在一起。
追求更好的設計,重構,甚至推翻重新設計。隨著智能機的普及,用戶的操作體驗已然不是鍵盤/鼠標式的PC風格所能滿足,更多的是以輕觸,滑動,拖拽,縮放等為代表的觸控方式。與之對應,嵌入式GUI技術出現了翻天覆地的變化,而RT-Thread原有的以C語言模擬面向對象技術進行開發的rtgui在代碼簡潔性、可讀性和實用性上也難以滿足需求——簡單來說,由觸控GUI帶來的面向對象需求,雖然使用C語言能夠實現,但太過繁瑣、復雜,和我們一直以來追求的簡潔之美背道而馳。思考再三,我們決定依照現代化GUI風格重寫GUI組件,以C++為基礎,支持多點觸摸,提供類似signal/slot信號槽的使用方式,包括各種動畫特效等……這一支持界面動畫效果的全新GUI,我們稱之為柿餅(Persimmon)。

圖二:Persimmon結構框圖
“簡單,唯美”,搭建高可伸縮性系統
從0.3.0到2.1.0,都是建立在“簡單、唯美”的設計理念基礎之上。再配合scons構建工具,從而讓RT-Thread成為一個高可伸縮性的系統:最小可以到2.5KB ROM,1KB RAM的nano系統;也可無縫延伸到功能豐富的,針對ARM9、ARM11、MIPS32等處理器,具備現代GUI風格,或多媒體功能的全功能版本。

圖三:從小型系統到全功能系
3
IoT,RT-Thread 3.0
回顧以往的版本,設計一套類似Linux/Unix優雅風格的輕型、可裁剪系統一直是RT-Thread的目標。能夠以開源、自由方式在嵌入式系統領域,或者說在Linux和RT-Thread系統之間自由穿梭,自由翱翔……這種感覺非常美妙。
隨著萬物互聯概念的普及,物聯網從最初的概念興起,逐步走到今天的大規模實現和部署階段,原有的嵌入式系統不再是孤立的系統,將形成一個有機的、聯動的整體。
這個大背景下, RT-Thread依然沿著自己的理念向著萬物互聯的IoT大步邁進,我們在RT-Thread的演進過程中不斷融合物聯網終端系統的新特征和新需求,終于迎來了第一個全新物聯網版本的推出, RT-Thread 3.0!
針對物聯網終端的高度碎片化和低資源占用要求,我們引入專門的配置工具,實現系統的高度可裁剪可定制;基于物聯網的多樣化通訊和連接方式,我們優化并支持豐富的網絡協議和無線連接如WiFi、NB-IoT等。
諸如此類,眾多優秀新功能的加入使得3.0版本成為物聯網芯片的理想選擇!

報名請識別上圖二維碼,參與RT-Thread 3.0的發布會,有驚喜等著您