一文让你了解RT-Thread
前言
要學習一項新知識或新的技能,首先要對其有個初步了解,然后再逐步學習如何運用它。
本文作為快速入門 RT-Thread 系列文章的第一篇,首先介紹一下,我當時是如何學習 RT-Thread 的,以及參與官方組織的活動的情況,希望給讀者參考,并有所啟發。
然后先介紹一下這款國產 RTOS 的大概內容,做到對 RT-Thread 有個初步的了解。
我的 RT-Thread 學習之路
1. 初識 RT-Thread
記得在 2017 年看到公眾號一篇文章介紹 RT-Thread,文章結尾留有聯系方式,可以拉入官方群,本著學習的目的,果斷加微信入群。
那時還不了解 RT-Thread,但是對于 RTOS 已經不陌生。已經學習過 uCos 和 FreeRTOS 兩款 RTOS 系統。
國產 RTOS 還是第一次接觸,并且能進官方技術交流群,當然要進群去學習了。
在網上搜了一下 RT-Thread 相關資料,簡單了解了這款國產的 RTOS。
RT-Thread 內核的第一個版本是熊譜翔先生在 2006 年年初發布的 0.1 版本。發展到現在,已經有十多年的歷史了。
因為 RTOS 中的任務更類似于通用操作系統中的線程,并且這個系統支持基于優先級的搶占式任務調度算法。所以把它命名為 RT-Thread,即實時線程。
后來又加了好多官方群,算得上 RT-Thread 的忠實粉絲了。
2. 入門 RT-Thread
由于時間原因,一直沒有真正開始學習 RT-Thread。直到 2018 年官方組織 15 天入門 RT-Thread 培訓,才開始真正地學習 RT-Thread。每天中午抽時間看當天的視頻,然后再實際動手實驗,復習課程學習的內容。
當初學習的時候,每天還組織抽獎,既學習了知識,還能獲得獎品。除了點贊還能說啥。當然,我運氣不錯,中了一個開發板(備注:此處不是炫耀)。
感謝 RT-Thread 官方組織的學習活動。課程學習完畢,自我感覺已經入門了。
現在官方視頻學習網址如下:
https://www.rt-thread.org/page/video.html
3. 讀內核源碼
入門學習結束后,覺得不能止于此。當時的想法是要讀一讀源碼,深入到 RTOS 內部機制的實現。
然后,開始每天抽一部分時間研究 RT-Thread 內核源代碼。逐漸地把內核源碼研究了一遍,弄懂了其設計思想和實現方法。不得不說,代碼寫的非常棒
基于此,較深入地理解了 RTOS 內核工作原理。感覺功力又上升了一個層次。
4. 參加網絡編程學習
后來參加官方組織的 RT-Thread 網絡編程學習營。每周一個任務,一共四周。完成后將實現過程形成筆記發布到官方論壇。
那時候學習勁頭足,白天上班,晚上回家研究學習任務。有時候為了解決問題,完成任務,甚至熬夜調試代碼。當然對于最后的收獲,卻是值得的。
這期間,不僅對網絡通信有深入了解,還接觸到了設備與云端通信,還認識了不少小伙伴。
完成網絡編程學習營任務發布的文章,如下圖
5. 新書提前閱讀
同年(2018年)官方組織新書提前閱讀評審書籍《嵌入式實時操作系統:RT-Thread設計與實現》,當然要參加啦。
每天閱讀一個章節,給出修改意見。在閱讀過程中,結合之前學習 RT-Thread 的知識,算是把 RT-Thread 又系統地學習了一遍。
通過對 RT-Thread 的學習,對 RTOS 的原理有了較深入的理解。自認為把 RTOS 相關的基礎知識夯實了。
新書出版,官方給送了一本,還有熊大的親筆簽名。
感謝熊大,感謝 RT-Thread 的各位小伙伴,提供了這么好的學習平臺。祝愿 RT-Thread 發展得越來越好。
了解 RT-Thread
RT-Thread 是一款完全由國內團隊開發維護的嵌入式實時操作系統(RTOS),具有完全的自主知識產權 。
RT-Thread,全稱是 Real Time-Thread,它是一個嵌入式實時多線程操作系統,基本屬性之一是支持多任務。在 RT-Thread 系統中,任務是通過線程實現的。
RT-Thread 主要采用 C 語言編寫,淺顯易懂,方便移植。它把面向對象的設計方法應用到實時系統設計中,使得代碼風格優雅、架構清晰、系統模塊化并且可裁剪性非常好。
RT-Thread 系統完全開源, 3.1.0 及以前的版本遵循 GPL V2 + 開源許可協議。從 3.1.0 以后的版本遵循 Apache License 2.0 開源許可協議,可以免費在商業產品中使用,并且不需要公開私有代碼。
RT-Thread 目前分為三個版本:標準版本、Nano 版本、Smart 版本。
詳細了解 RT-Thread,可以訪問官方網站:
https://www.rt-thread.org
RT-Thread 在線文檔網址為:
https://www.rt-thread.org/document/site/#/
1. 標準版
標準版 RT-Thread 與其他很多 RTOS 如 FreeRTOS、uC/OS 的主要區別之一是,它不僅僅是一個實時內核,還具備豐富的中間層組件。
詳細介紹可參考官方網站:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README
標準版軟件架構如下圖所示。
物聯網操作系統是指以操作系統內核(可以是 RTOS、Linux 等)為基礎,包括如文件系統、圖形庫等較為完整的中間件組件,具備低功耗、安全、通信協議支持和云端連接能力的軟件平臺,RT-Thread 就是一個 IoT OS。
2. Nano版本
RT-Thread Nano 是一個極簡版的硬實時內核,是一款可裁剪的、搶占式實時多任務的 RTOS。
其內存資源占用極小,功能包括任務處理、軟件定時器、信號量、郵箱和實時調度等相對完整的實時操作系統特性。
詳細內容可參考官方在線文檔網站:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction
Nano 版軟件框圖如下,包含支持的 CPU 架構與內核源碼,還有可拆卸的 FinSH 組件:
3. Smart 版本
RT-Thread Smart 是基于 RT-Thread 操作系統上的混合操作系統,簡稱為 rt-smart,它把應用從內核中獨立出來,形成獨立的用戶態應用程序,并具備獨立的地址空間(32 位系統上是 4G 的獨立地址空間)。
詳細了解可以訪問官方資料網站:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/README
rt-smart 的整體結構框圖如下,在硬件平臺的基礎上通過 MMU、系統調用的方式把整個系統分成了內核態及用戶態。
RT-Thread 內核
內核是操作系統最基礎也是最重要的部分。下圖為 RT-Thread 內核架構圖,內核處于硬件層之上,內核部分包括內核庫、實時內核實現。
內核庫是為了保證內核能夠獨立運行的一套小型的類似 C 庫的函數實現子集。這部分根據編譯器的不同自帶 C 庫的情況也會有些不同,當使用 GNU GCC 編譯器時,會攜帶更多的標準 C 庫實現。
實時內核的實現包括:對象管理、線程管理及調度器、線程間通信管理、時鐘管理及內存管理等等。
內核最小的資源占用情況是 3KB ROM,1.2KB RAM。
線程調度
線程是 RT-Thread 操作系統中最小的調度單位,線程調度算法是基于優先級的全搶占式多線程調度算法。
在系統中除了中斷處理函數、調度器上鎖部分的代碼和禁止中斷的代碼是不可搶占的之外,系統的其他部分都是可以搶占的,包括線程調度器自身。
支持 256 個線程優先級(也可通過配置文件更改為最大支持 32 個或 8 個線程優先級),0 優先級代表最高優先級,最低優先級留給空閑線程使用。
時鐘管理
RT-Thread 的時鐘管理以時鐘節拍為基礎,時鐘節拍是 RT-Thread 操作系統中最小的時鐘單位。
RT-Thread 的定時器提供兩類定時器機制:單次觸發定時器、周期觸發定時器。
通常使用定時器定時回調函數(即超時函數),完成定時服務。用戶根據自己對定時處理的實時性要求選擇合適類型的定時器。
線程同步
RT-Thread 采用信號量、互斥量與事件集實現線程間同步。
線程通過對信號量、互斥量的獲取與釋放進行同步;互斥量采用優先級繼承的方式解決了實時系統常見的優先級翻轉問題。
線程通過對事件的發送與接收進行同步;事件集支持多事件的 “或觸發” 和“與觸發”,適合于線程等待多個事件的情況。
線程通信
RT-Thread 支持郵箱和消息隊列等通信機制。
郵箱中一封郵件的長度固定為 4 字節大小;消息隊列能夠接收不固定長度的消息,并把消息緩存在自己的內存空間中。
內存管理
RT-Thread 支持靜態內存池管理及動態內存堆管理。
動態內存堆管理模塊在系統資源不同的情況下,分別提供了面向小內存系統的內存管理算法及面向大內存系統的 SLAB 內存管理算法。
還有一種動態內存堆管理叫做 memheap,適用于系統含有多個地址且不連續的內存堆。使用 memheap 可以將多個內存堆 “粘貼” 在一起,讓用戶操作起來像是在操作一個內存堆。
I/O 設備管理
RT-Thread 將 PIN、I2C、SPI、USB、UART 等作為外設設備,統一通過設備注冊完成。實現了按名稱訪問的設備管理子系統,可按照統一的 API 界面訪問硬件設備。
在設備驅動接口上,根據嵌入式系統的特點,對不同的設備可以掛接相應的事件。當設備事件觸發時,由驅動程序通知給上層的應用程序。
后續計劃
作為 RT-Thread 的學習者和受益者,以及對國產 RTOS 的支持。愿意付出自己的綿薄之力,把自己學到的知識形成筆記文章分享出來,供有需要的小伙伴作為學習參考。
首先,會盡量以簡單的方式,介紹 RT-Thread 提供的資源如何使用,理論結合實踐,達到快速入門的效果。
然后,再以專題的形式,介紹內核源碼實現的內部機制。爭取做到,知其然,知其所以然。
在寫作過程中,難免出現紕漏或者理解偏差的地方,歡迎指正,一起探討交流。
一起學習、一起進步。加油~
總結
以上是生活随笔為你收集整理的一文让你了解RT-Thread的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: db2与mysql语法区别_db2和my
- 下一篇: 爬虫爬取下载qq音乐,又跟新的风口相关?