再来学习一下RT-Thread的软件架构 | 文末赠书5本《软件架构实践》
再來學習一下RT-Thread的軟件架構
摘要:
學習和使用了RT-Thread有2年多了的時間,最近一直在研究開源項目Matter相關的軟件架構設計,趁此機會,再來溫習一下rt-thread的軟件架構設計。
文章目錄
- 1 寫在前面
- 2 RT-Thread的軟件架構
- 2.1 RT-Thread的軟件架構示意圖
- 2.2 RT-Thread的軟件架構解析
- 2.3 我對RT-Thread的軟件架構圖的理解
- 3 軟件架構之我見
- 4 友情推薦
- 5 文末福利
1 寫在前面
學習和使用了RT-Thread有2年多了的時間,最近一直在研究開源項目Matter相關的軟件架構設計,趁此機會,再來溫習一下RT-Thread的軟件架構設計。
軟件設計這個東西,個人覺得是比較抽象的,我們所能看到的一些軟件架構的定義,是一些做通用的技術場景做了一些高度抽象,提煉出來的概念。所以,我們要深入學習一個開源項目,學習其軟件架構是非常有必要的。
本文,博主就著RT-Thread官方提供的軟件設計框架,再學習學習,順帶結合自己的工作經歷,談一下軟件架構遷移的問題。
2 RT-Thread的軟件架構
2.1 RT-Thread的軟件架構示意圖
從RT-Thread官方的技術文檔中,我們可以得知RT-Thread整一個軟件架構長這樣:
從這個軟件架構圖,我們可以看出,其實我們通常意義說的 RT-Thread軟件架構,這是一個比較宏觀的概念,它不僅僅包含RTOS內核,還包括一些組件和服務層,同時也包括一些常見常用的軟件包。
2.2 RT-Thread的軟件架構解析
以下部分小部分內容摘自RT-Thread技術論壇文檔中心。詳見戳這里:
近年來,物聯網(Internet Of Things,IoT)概念廣為普及,物聯網市場發展迅猛,嵌入式設備的聯網已是大勢所趨。終端聯網使得軟件復雜性大幅增加,傳統的 RTOS 內核已經越來越難滿足市場的需求,在這種情況下,物聯網操作系統(IoT OS)的概念應運而生。**物聯網操作系統是指以操作系統內核(可以是 RTOS、Linux 等)為基礎,包括如文件系統、圖形庫等較為完整的中間件組件,具備低功耗、安全、通信協議支持和云端連接能力的軟件平臺,**RT-Thread 就是一個 IoT OS。
RT-Thread 與其他很多 RTOS 如 FreeRTOS、uC/OS 的主要區別之一是,它不僅僅是一個實時內核,還具備豐富的中間層組件,如下圖所示。
它具體包括以下部分:
- 內核層:RT-Thread 內核,是 RT-Thread 的核心部分,包括了內核系統中對象的實現,例如多線程及其調度、信號量、郵箱、消息隊列、內存管理、定時器等;libcpu/BSP(芯片移植相關文件 / 板級支持包)與硬件密切相關,由外設驅動和 CPU 移植構成。
- 組件與服務層:組件是基于 RT-Thread 內核之上的上層軟件,例如虛擬文件系統、FinSH 命令行界面、網絡框架、設備框架等。采用模塊化設計,做到組件內部高內聚,組件之間低耦合。
- RT-Thread 軟件包:運行于 RT-Thread 物聯網操作系統平臺上,面向不同應用領域的通用軟件組件,由描述信息、源代碼或庫文件組成。RT-Thread 提供了開放的軟件包平臺,這里存放了官方提供或開發者提供的軟件包,該平臺為開發者提供了眾多可重用軟件包的選擇,這也是 RT-Thread 生態的重要組成部分。軟件包生態對于一個操作系統的選擇至關重要,因為這些軟件包具有很強的可重用性,模塊化程度很高,極大的方便應用開發者在最短時間內,打造出自己想要的系統。RT-Thread 已經支持的軟件包數量已經達到 400+,如下舉例:
- 物聯網相關的軟件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。
- 腳本語言相關的軟件包:目前支持 Lua、JerryScript、MicroPython、PikaScript。
- 多媒體相關的軟件包:Openmv、mupdf。
- 工具類軟件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。
- 系統相關的軟件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。
- 外設庫與驅動類軟件包:RealTek RTL8710BN SDK。
- 其他。
2.3 我對RT-Thread的軟件架構圖的理解
本小節,談一談,我對RT-Thread的軟件架構圖的學習和理解。
a) 從整體上看,RT-Thread的這個軟件架構,很好地做到了層次分明,它把整一個軟件,從功能邏輯上劃分為三個層面:軟件包這個層次、組件或服務包這個層次、內核實現這個層次。
這一點,使我們學習軟件架構設計,必須要掌握的知識點。
每接觸到一個軟件工程,勢必會有不同的邏輯功能,那么如何把這些邏輯功能,通過一定的界線做好層次劃分,這是軟件設計的第一步。如果你還不清晰該如何劃分,可以借鑒一下RT-Thread的設計思路。
b) 在劃分好基本的三大層次之后,開始規劃每一個層次之間的聯系,說白了,就是API的調用關系。
從RT-Thread的設計里面,我們可以看到,通常我們做層級直接的聯系時,需要遵從的一個原則就是不要跨層級調用。
比如如上圖所示:盡量避免軟件包層級調用到內核層太深的API;而應該盡量選擇組件或服務層提供的易用型API。
c) 調用層級清晰后,開始規劃每個層級中平行的模塊關系,拿內核層來說,libcpu模塊是一個對內核提供抽象的CPU接口,同時對下它就勢必要去適配各種不同指令集的CPU。在邏輯架構里面,不同的CPU是一個平行的關系;這也就意味著在設計libcpu的接口時,務必考慮到每個不同CPU的適配兼容性,這其實是一個不小的挑戰。
也就是說在同一個層級里面,其實也有小的上下層級的劃分,只有把這幾個邏輯層次都搞清楚后,軟件架構的層次感就會非常鮮明,這樣的話,在一個層次清晰的軟件架構下編寫代碼,那就是一個字:爽!
以上就是我結合自己的一些思路,提出對RT-Thread軟件框架的學習和體會,不一定全部都是對的,我也是個持續學習者,歡迎大家一同學習和探討。
3 軟件架構之我見
最近我剛好也在學習Matter相關的內容,順帶聊一聊我對Matter軟件架構的看法。
Matter是一個開源的物聯網協議,致力于解決物聯網智能家居領域各大云平臺不互聯互通的難題。
從它的官方倉庫,我們可以看到它的軟件框架張這樣:
這個軟件框架是由海內外的幾個科技巨頭,諸如Google、Apple、亞馬遜、涂鴉、樂鑫等,一起創造設計的。
我覺得從軟件設計的角度上來看,它很好地把底層通訊與應用層邏輯分離開來,而這就是我們軟件設計里面一大很重要的原則:高內聚、低耦合。
要想做到這樣的軟件架構設計,必須對你的軟件項目有足夠的理解,還要有豐富的邏輯抽象能力,對相同的實物做同類的歸納,而不同的實物,做好層次分離,達到概念合理,邏輯清晰的地步。
軟件架構設計是一項需要長期實踐和學習的能力,就拿Matter這套軟件架構來說,我也才學了一些皮毛,還有很多知識需要進一步消化。
如果你也對Matter感興趣,歡迎與我交流、套路。
4 友情推薦
今天給大家推薦一本軟件架構領域的教科書《軟件架構實踐》。
在比爾 · 蓋茨的眾多稱謂中,據說他更偏愛“首席軟件架構師”。在網易創始人丁磊名字前,也有“首席架構師”這樣的稱謂。架構師是如此重要,以至于在《黑客帝國》 中各色人物悉數登場,最后你卻發現這一切都是被一個稱作“架構師”的白胡子老頭左 右的。
這是否意味著要成為架構師就要以“領導”權威來支撐或者以時間或實踐來積累? 當然不必這樣,在修煉成“架構師”的道路上,一本好書能讓你少走許多彎路,幫助你學會“架構師”思維,快速進入“架構師”角色。
隨著數字時代的到來,各種云基礎設施、微服務、框架層出不窮,互聯和互操作變 得唾手可得,集成和重用已有成果成為軟件開發常態。在軟件系統變得越來越復雜的同時,今天架構師似乎不再需要架構知識了,甚至軟件開發的精髓被調侃是“ Ctrl+C 和 Ctr1+V ”。顯然,在已有的架構上實現二次架構設計并不是架構師的未來,我們既要站 在巨人的肩膀上, 善于利用后發優勢, 更需要從原始創新上取得突破, 這就需要你回到 問題的原點,系統地掌握軟件架構的知識,努力貢獻優秀的原創架構。
《軟件架構實踐》 就是這樣一本書。本書是其第 4 版,在軟件架構領域,本書已經成為標準。軟件架構的術語或知識,大都可以在這本書中找到相關內容和最準確的定義。
5 文末福利
應廣大粉絲需求,再次贈送一次 軟件架構 相關的書籍,感興趣的朋友歡迎關注我的CSDN技術社區活動貼:【第18期社區福利贈書活動】這本軟件架構書被稱為標準,憑什么?(文末贈書《軟件架構實踐》5本)-CSDN社區。
或者點擊文章下方的微信公眾號名片,回復 【架構】 來參與贈書活動。
總結
以上是生活随笔為你收集整理的再来学习一下RT-Thread的软件架构 | 文末赠书5本《软件架构实践》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精通 Python OpenCV4:第二
- 下一篇: unity 实现了鼠标滚动放大和缩小物体