Hello,大家好,我是 RT-Thread 宣傳委員(自封的)🙂
我經常給大家安利 RT-Thread,尤其是那些還沒用上 RT-Thread、在糾結選擇哪個 RTOS、要不要學習 RTOS 的朋友,
1. RT-Thread 簡介
1.1 RT-Thread 是什么
據不完全統計,世界有成千上萬個 RTOS(Real-time operating system,實時作業系統),RT-Thread 就是其中一個優秀的作品,
RT-Thread 內核的第一個版本是熊譜翔先生在 2006 年年初發布的 0.1 版本,因為 RTOS 中的任務更類似于通用作業系統中的執行緒,并且這個系統支持基于優先級的搶占式任務調度演算法,調度器的時間復雜度是 O(1),所以把它命名為 RT-Thread,即實時執行緒,名字起得真妙 (,???)ノ
經過14年的發展,RT-Thread 被廣泛應用于智能家居、智慧城市、安防、工控、穿戴等眾多行業領域,累計裝機量超過6億臺,GitHub 的 Star 數量超過 5.3k,嵌入式開源社區活躍度行業第一,

1.2 RT-Thread 的作用
隨著 MCU 硬體性能的提升、外設的增加以及軟體功能需求的增加,越來越多專案采用 RTOS 的開發方式,一方面裸機開發方式的軟體框架不清晰,對后續擴展功能極其不利;另一方面,由于軟體復雜性的增加,裸機開發對工程師的要求越來越嚴苛,過多使用中斷等因素,都會增加系統的不可靠性,

和其他優秀的 RTOS 一樣,RT-Thread 的首要目標也是解決這些問題,RT-Thread 內核的主要功能是向下管理所有硬體資源,向上為應用程式提供 API 介面和軟體服務,所有任務在內核的管理、同步和調度下有序運行,
簡單來說,使用 RT-Thread 能夠帶來如下好處:
- 支持任務并發處理
- 容易擴展新的功能
- 破解應用的復雜性
- 增強代碼可移植性
- 節省軟體開發時間
- …
您可能會說,其他 RTOS 也能提供這些好處呀,為什么你要推薦 RT-Thread?
因為 RT-Thread 還有許多優點,包括它支持非常多的硬體平臺,還擁有及其豐富的組件和軟體包(包括檔案系統、網路、IoT、AI、傳感器等等),提供了便捷的開發環境和 IDE 工具,以及有眾多技術檔案、參考設計和活躍的開發者社區,這些都能幫助您快速入門和掌握 RT-Thread,開發出優秀的產品,
當然啦,最重要的是,RT-Thread 是一群扎實做事的中國人寫的開源作業系統,幫助您做出好產品的同時還能提高民族自信和國家競爭力,
1.3 RT-Thread 的特點
相比其他作業系統,RT-Thread 的主打特性是 “小而美的物聯網作業系統”,
“小” 體現在 RT-Thread 的體積小,最小資源占用 1.2KB RAM 和 2.5KB flash,RT-Thread 可伸縮、易裁剪的特性,幫助用戶在需要一個適用的作業系統的時候,輕松地進行裁減,適應到需要的場景,不占用過多的資源,
“美” 不單止代碼質量和代碼風格,還有 RT-Thread 的使用和開發體驗,以及增加了小程式、SMP 多核調度、PSA 安全支持等多項實用的新功能,使得 RT-Thread 系統能實作靈活極簡的應用開發,能擴展至眾多高性能、高安全的應用領域,
“物聯網” 則體現在 RT-Thread 針對物聯網場景提供的眾多組件和軟體包,比如 AT組件、WiFi、藍牙、LoRa、Sensor、AI 等等,以及針對安全和低功耗的優化,還有以 JS 為開發方式的柿餅 UI,都使其非常適用于 IoT 領域,
1.4 開源的 RT-Thread
您可能會擔憂,RT-Thread 作為一個開源的作業系統,會不會污染企業私有代碼?開發程序中會不會有很多坑?

其實不用擔心,因為 RT-Thread 是一個“開源、社區化、中立”的系統,遵循 Apache 2.0 開源許可協議,意味著您可以放心地免費在商業產品中使用 RT-Thread 內核和組件,不需要公開私有代碼,只需要在產品說明書上提及“基于 RT-Thread 系統”或“Powered by RT-Thread”即可,
Tips:因為 RT-Thread 軟體包平臺是開放的,許多軟體包都是來自社區開發者,不同軟體包的許可協議可能會不一樣,所以在商業產品中使用時需要稍加注意,
同時,RT-Thread 非常注重在嵌入式開源社區的生態建設,經過多年的積累,除了有官方技術支持團隊,還有活躍的開源社區和數十萬開發者,開發程序中的遇到難題都能尋找官方團隊和社區開發者的支持,
2. RT-Thread 版本
RT-Thread 針對不同應用場景,目前提供了三個主版本,分別是 RT-Thread 標準版、RT-Thread Nano 和 RT-Thread Smart,
代碼均可在 https://www.rt-thread.org/page/download.html 頁面下載,
2.1 RT-Thread 標準版
最常用應該是 RT-Thread 標準版(也稱為 RT-Thread 全功能版本),它由內核層、組件和服務層、IoT 框架層、檔案系統、圖形庫、設備框架等組成,包含完整的中間件組件,具備低功耗、安全、通信協議支持和云端連接能力,是一個完整的 IoT OS,

可以看到,除了實時內核,RT-Thread 標準版還具備豐富的中間層組件和軟體包生態,這也是 RT-Thread 與其他很多 RTOS 的主要區別之一,
2.2 RT-Thread Nano
RT-Thread Nano 是一個極簡的硬實時內核,其記憶體資源占用極小,功能包括任務管理、軟體定時器、信號量、郵箱和實時調度等相對完整的實時作業系統特性,對于系統資源緊張或是專案功能較為簡單的,則可以選擇基于 RT-Thread Nano 進行開發,比如家電、消費、醫療、工控領域的 32 位入門級 MCU,

Tips:RT-Thread Nano 已得到 ARM Keil 官方的認可和支持,在 Keil MDK 中以 pack 方式提供,方便用戶使用,
2.3 RT-Thread Smart
RT-Thread Smart 是一款高性能混合微內核作業系統,其定位在于填補傳統 RTOS 和大型作業系統 Linux 之間的空白,在實時性、成本、安全性、啟動速度等方面取得最佳的平衡,適用于帶 MMU 的中高端應用的芯片,例如 ARM Cortex-A 系列芯片、MIPS 芯片、帶 MMU 的 RISC-V 芯片等,廣泛應用于安防、車載、軍工、消費電子等領域,

RT-Thread Smart 在 RT-Thread 標準版的基礎上啟用獨立、完整的行程方式,同時以混合微內核模式執行,這里“混合”的意思是指在編譯時決定整體系統采用什么樣的運行模式,

2.4 更多
除了以上三個主版本,RT-Thread 還有不同的演進版本,包括前幾天開發者大會發布的專用于智能穿戴領域的 PersimUI OS(湃心OS),以及應用于智能表計領域的 MoM(Microkernel on MCU),還有一些許可授權的衍生OS,

3. RT-Thread 設計思想
RT-Thread 有許多巧妙的設計思想,篇幅有限,這里先介紹幾個,其他留給您慢慢探索,
3.1 任務調度
RT-Thread 支持多任務,允許多個任務同時運行,但并不是真正的同時運行(對于單核的 MCU),而是宏觀上的并行,這就需要執行緒調度器(任務調度器)來完成任務的調度了,

RT-Thread 最大支持 256 級優先級(0~255),數值越小優先級越高,可以根據實際情況選擇 8 或 32 級,對于 ARM Cortex-M 系列,通常采用 32 級優先級,
調度器是作業系統的核心,其主要功能就是實作執行緒的切換,RT-Thread 通過管理就緒串列,當需要調度時可以直接找出就緒串列中優先級最高的執行緒,然后執行該執行緒,時間復雜度為 O(1),
/* ready thread list */
rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];
/* get highest ready priority thread */
highest_priority_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next,
struct rt_thread,
tlist);
同時,RT-Thread 還采用 round-robin 策略確保對具有相同優先級的所有執行緒進行同等調度,RT-Thread 的每個執行緒都有時間片引數,如果您希望控制相同優先級的多個執行緒的單次運行時長,可以分別給它們設定不同的時間片,
3.2 啟動流程
RT-Thread 系統的初始化在 main() 函式之前,這意味著您不需要操心 RT-Thread 的初始化操作,可以專心撰寫應用程式,
RT-Thread 還提供了自動初始化機制,初始化函式只需要在函式定義處通過宏定義的方式進行宣告,就會在系統啟動程序中自動執行,不需要在應用代碼中顯示呼叫,相當優雅,
針對不同層級,RT-Thread 提供了不同的宏介面:
| 初始化順序 | 宏介面 | 描述 |
|---|---|---|
| 1 | INIT_BOARD_EXPORT(fn) | 非常早期的初始化,此時調度器還未啟動 |
| 2 | INIT_PREV_EXPORT(fn) | 主要是用于純軟體的初始化、沒有太多依賴的函式 |
| 3 | INIT_DEVICE_EXPORT(fn) | 外設驅動初始化相關,比如網卡設備 |
| 4 | INIT_COMPONENT_EXPORT(fn) | 組件初始化,比如檔案系統或者 LWIP |
| 5 | INIT_ENV_EXPORT(fn) | 系統環境初始化,比如掛載檔案系統 |
| 6 | INIT_APP_EXPORT(fn) | 應用初始化,比如 GUI 應用 |
3.3 內核物件
RT-Thread 內核采用面向物件的設計思想進行設計,系統級的基礎設施都是內核物件,比如執行緒、信號量、互斥量、事件、郵箱、訊息佇列、定時器、記憶體池、設備驅動等等,然后通過內核物件管理系統來訪問/管理所有內核物件,例如當您創建一個物件時,內核物件管理系統就會將這個物件放到一個叫物件容器的地方,

這樣做是為了方便管理內核資源,在后續的開發除錯階段可以很方便地獲取各個內核物件的狀態,并通過 FinSH 輸出除錯資訊,
3.4 FinSH 控制臺
FinSH 是 RT-Thread 最早的組件之一,提供了一套類似于 Linux Shell 的操作介面,您可以通過 串口/以太網/USB 等方式與 PC 機進行通信,通過命令列查看系統資訊或用于除錯,

RT-Thread 默認內置了一些 FinSH 命令,比如 list_thread 和 ps 用于查看執行緒資訊,list_sem 用于查看系統信號量資訊,free 用于查看系統記憶體使用情況等等,如果開啟 DFS 組件,還可以使用 ls、cd、cp 等命令操作檔案系統,
4. RT-Thread 快速上手
為了提升開發體驗,RT-Thread 為我們提供了幾種開發環境,主要包括使用多年的 Env 工具和近年來主推的 RT-Thread Studio 集成開發環境,
4.1 Env 工具
Env 是 RT-Thread 推出的開發輔助工具,針對基于 RT-Thread 作業系統的專案工程,提供編譯構建環境、圖形化系統配置及軟體包管理功能,其內置的 menuconfig 提供了簡單易用的配置剪裁工具,可對內核、組件和軟體包進行自由裁剪,使系統以搭積木的方式進行構建,
- 優點:支持 Windows/Linux/MacOS 平臺,配置、運行速度快,
- 缺點:學習周期較長,需要了解 git、scons、Kconfig、Python 等知識,需要配合其他工具進行編輯和除錯,
- 下載:https://www.rt-thread.org/page/download.html
- GitHub:https://github.com/RT-Thread/env

4.2 RT-Thread Studio
RT-Thread Studio 是一個基于 Eclipse 的開發工具軟體,主要包括工程創建和管理,代碼編輯,SDK管理,RT-Thread配置,構建配置,除錯配置,程式下載和除錯等功能,
- 優點:低門檻快速上手,一站式開發,圖形化配置,社區版本永久免費,
- 缺點:目前只支持 Windows 平臺,配置、編譯、運行速度較慢,支持的硬體平臺較少,
- 下載:https://www.rt-thread.org/page/studio.html

4.3 其他
還有其他一些開發方式,比如在 Keil MDK 中以 pack 形式添加 RT-Thread 內核,
5. 如何參與社區貢獻
最后,如果您也想參與社區建設,為 RT-Thread 的生態貢獻一份力量,那么您可以結合自身情況選擇輕度參與或重度參與,
5.1 輕度參與
- 在公司產品、個人專案或比賽中使用 RT-Thread;
- 在 RT-Thread 社區 中提問或回答問題;
- 在 GitHub 給 RT-Thread 提 Issue 反饋 Bug;
- 參與社區活動和 B站 直播;
- …
5.2 重度參與
- 在 GitHub 給 RT-Thread 提 PR 修復 Bug 或增加新功能;
- 制作軟體包并提交到 官方軟體包索引倉庫;
- 領取 任務 并加入 社區作業小組;
- 組建社區興趣小組一起學習;
- 在當地組織或參與開發者沙龍;
- 參與 RT-Thread 開發者能力認證考試;
- …
還有,別忘了參加 RT-Thread 年度開發者大會!
6. 有哪些學習資料
- RT-Thread 檔案中心
- RT-Thread 視頻中心
- RT-Thread 參考設計中心
- RT-Thread 應用專案匯總
- RT-Thread 編程手冊
- ART-Pi 資源網站
CSDN認證博客專家
架構
Linux
MySQL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240890.html
標籤:其他
上一篇:USB-IF認證 PD3.0芯片,可實作雙盲插,針對switch游戲機的視頻擴展功能做了特別的適配。樂得瑞(LDR)LDR6282
