RT-Thread簡介

RT-Thread簡介

RT-Thread是一款完全由國內團隊開發維護的嵌入式實時操作系統(RTOS),具有完全的自主知識產權。
經過16個年頭的沉淀,伴隨著物聯網的興起,它正演變成一個功能強大、組件豐富的物聯網操作系統。

RT-Thread概述

RT-Thread,全稱是Real Time-Thread,顧名思義,它是一個嵌入式實時多線程操作系統,基本屬性之一是支持多任務,允許多個任務同時運行并不意味著處理器在同一時刻真地執行了多個任務。

事實上,一個處理器核心在某一時刻只能運行一個任務,由于每次對一個任務的執行時間很短、任務與任務之間通過任務調度器進行非常快速地切換(調度器根據優先級決定此刻該執行的任務),給人造成多個任務在一個時刻同時運行的錯覺。

在RT-Thread系統中,任務通過線程實現的,RT-Thread中的線程調度器也就是以上提到的任務調度器。

RT-Thread主要采用C語言編寫,淺顯易懂,方便移植。
它把面向對象的設計方法應用到實時系統設計中,使得代碼風格優雅、架構清晰、系統模塊化并且可裁剪性非常好。

針對資源受限的微控制器(MCU)系統,可通過方便易用的工具,裁剪出僅需要3KB Flash、1.2KB RAM內存資源的NANO版本。

而對于資源豐富的物聯網設備,RT-Thread又能使用在線的軟件包管理工具,配合系統配置工具實現直觀快速的模塊化裁剪,無縫地導入豐富的軟件功能包,實現類似Android的圖像界面及觸摸滑動效果,智能語音交互效果等復雜功能。

相較于Linux操作系統,RT-Thread體積小,成本低、功耗低、啟動快速,實時性高、占用資源小,非常適用于各種資源受限(如成本、功耗限制等)的場合。
雖然32位MCU是它的主要運行平臺,實際上很多帶有MMU,基于ARM9、ARM11甚至Cortex-A系列級別CPU的應用處理器在特定應用場合也適合使用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。
其他。

Keil模擬器STM32F103上手指南

一般嵌入式操作系統因為它的特殊性,往往和硬件平臺密切相關連,具體的嵌入式操作系統往往只能在特定的硬件上運行。

對于剛接觸RT-Thread操作系統的讀者并不容易馬上就獲得一個和RT-Thread操作系統相配套的硬件模塊,但隨著計算機技術的發展,我們可以采用軟件方式來模擬一個能夠運行RT-Thread操作系統的硬件模塊,這就是ARM公司的MDK-ARM仿真模擬環境。

RT-Thread內核介紹

內核是一個操作系統的核心,是操作系統最基礎也最重要的部分。
它負責管理系統的線程、線程間通信、系統時鐘、中斷及內存等。
在這里插入圖片描述
內核處于硬件層之上,內核部分包括內核庫、實時內核實現。

內核庫是為了保證內核能夠獨立運行的一套小型的類似C庫的函數實現子集。
這部分根據編譯器的不同自帶C庫的情況也會有些不同,當使用GNU GCC編譯器時,會攜帶更多的標準C庫實現。

C庫:也叫C運行庫(C Runtime Library),它提供了類似“strcpy”等函數的實現,RT-Thread Kernel Service Library僅提供內核用到的一小部分C庫函數實現,為了避免與標準C庫重名,在這些函數前都會添加上rt_前綴。

實時內核的實現包括:對象管理、線程管理及調度器、線程間通信管理、時鐘管理及內存管理等等,內核最小的資源占用情況是 3KB ROM,1.2KB RAM。

線程調度

線程是RT-Thread操作系統中最小的調度單位,線程調度算法是基于優先級的全搶占式多線程調度算法,即在系統中除了中斷處理函數、調度器上鎖部分的代碼和緊張中斷的代碼是不可搶占的之外,系統其它部分都是可以搶占的,包括線程調度器自身。

支持256個線程優先級(也可通過配置文件更改為最大支持 32 個或 8 個線程優先級,針對 STM32 默認配置是 32 個線程優先級)。

0優先級代表最高優先級,最低優先級留給空閑線程使用。
同時它也支持創建多個具有相同優先級的線程,相同優先級的線程間采用時間片的輪轉調度算法進行調度,使每個線程運行相應時間。
調度器在尋找那些處于就緒狀態的具有最高優先級的線程時,所經歷的時間是恒定的,系統也不限制線程數量的多少,線程數目只和硬件平臺的具體內存相關。

時鐘管理

RT-Thread的時鐘管理以時鐘節拍為基礎,時鐘節拍是RT-Thread操作系統中最小的時鐘單位。
RT-Thread的定時器提供兩類定時器機制:第一類是單次觸發定時器,這類定時器在啟動后只會觸發一次定時器事件,然后定時器自動停止。
第二類是周期觸發定時器,這類定時器會周期性觸發定時器事件,直到用戶手動的停止定時器,否則將永遠持續執行下去。

另外,根據超時函數執行時所處的上下文環境,RT-Thread的定時器可以設置為HARD_TIMER模式或者SOFT_TIMER模式。

通常使用定時器定時回調函數(即超時函數),完成定時服務。

線程間同步

RT-Thread采用信號量、互斥量與事件集實現線程間同步。
線程通過對信號量、互斥量的獲取與釋放進行同步;
互斥量采用優先級繼承的方式解決了實時系統常見的優先級翻轉問題。
線程同步機制支持線程按優先級等待方式獲取信號量或互斥量。
線程通過對事件的發送與接收進行同步。
事件集支持多事件的“或觸發”和“與觸發”,適合于線程等待多個事件的情況。

線程間通信

RT-Thread支持郵箱和消息隊列等通信機制。
郵箱中一封郵件的長度固定為4字節大小。
消息隊列能夠接收不固定長度的消息,并把消息緩存在自己的內存空間中。
郵箱效率較消息隊列更為高效。
郵箱和消息隊列的發送動作可安全用于中斷服務例程中。
通信機制支持線程按優先級等待方式獲取。

內存管理

RT-Thread支持靜態內存池管理及動態內存堆管理。當靜態內存池具有可用內存時,系統對內存塊分配的時間將是恒定的;當靜態內存池為空時,系統將申請內存塊的線程掛起或阻塞掉(即線程等待一段時間后仍未獲得內存塊就放棄申請并返回,或者立刻返回。等待的事件取決于申請內存塊時設置的等待時間參數),當其它線程釋放內存塊到內存池時,如果有掛起的待分配內存塊的線程存在的話,則系統會將這個線程喚醒。

動態內存堆管理模塊在系統資源不同的情況下,分別提供了面向小內存系統的內存管理算法、面向大內存系統的SLAB內存管理算法。

還有一種動態內存堆管理叫做memheap,適用于系統含有多個地址且不連續的內存堆。
使用memheap可以將多個內存堆“粘貼”在一起,讓用戶操作起來像是在操作一個內存堆。

I/O設備管理

RT-Thread將PIN、I2C、SPI、USB、UART等作為外設設備,統一通過設備注冊完成。
實現了按名稱訪問的設備管理子系統,可按照統一的API界面訪問硬件設備。
在設備驅動接口上,根據嵌入式系統的特點,對不同的設備可以掛接相應的事件。當設備事件觸發時,由驅動程序通知給上層的應用程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

調用第三方API ,實現手機號碼歸屬地及運營商查詢

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 運行結果: 中國電信 西雙版納 西雙版納,中國電信 代碼: import java.io.BufferedReader; import java.io.I…

學成在線--21.課程信息修改

文章目錄一.需求分析二.課程管理導航頁面1.定義course_manage.vue為課程管理頁面2.創建各個信息管理頁面3.創建路由三.服務端1.Api接口1)根據課程ID查詢課程信息2)修改課程信息2.Dao3.Service4.Controller四.前端1. 完成course_baseinfo.vue頁面2.API方法…

HTTP協議特點

(一)HTTP協議是無狀態的。也就是說,同一個客戶第二次訪問同一個服務器上的頁面時,服務器的響應與第一次被訪問時相同。服務器不記得訪問過得這個用戶,也不記得為這個客戶服務過多少次。 (二)HT…

C#曲線分析平臺的制作(四,highcharts+ajax加載后臺數據)

在上一篇博客:C#曲線分析平臺的制作(三,三層構架echarts顯示)中已經完成了后臺的三層構架的簡單搭建,為實現后面的拓展應用開發和review 改寫提供了方便。而在曲線分析平臺中,往往有要求時間軸聯動功能&…

國際C語言混亂代碼大賽結果公布

國際C語言混亂代碼大賽(IOCCC, The International Obfuscated C Code Contest)是一項國際編程賽事,從1984年開始,每年舉辦一次(1997年、1999年、2002年、2003年和2006年例外)。目的是寫出最有創意的最讓人難…

JDBC連接數據庫(一)

原文地址http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html JDBC連接數據庫 創建一個以JDBC連接數據庫的程序,包含7個步驟: 1、加載JDBC驅動程序: 在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM…

eclipse加速之禁用 JS、jsp 等文件的語法驗證

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 去除eclipse的JS驗證: 將windows->preference->Java Script->Validator->Errors/Warnings-> Enable Javascr…

學成在線--22.課程營銷

文章目錄一.需求分析二.數據模型三.服務端1.Api接口1)查詢課程營銷信息2)更新課程營銷信息2.Dao3.Service4.Controller四.前端1.Api 方法2.編寫 course_marketinfo.vue1)template2)數據對象3)保存方法4)在m…

電子郵件系統

(一)電子郵件系統的構成 1.用戶代理 用戶與電子郵件系統的接口,用戶代理使用戶能夠通過一個很友好的接口來發送和接收郵件,用戶代理就是一個運行在PC上的程序。 2 郵件服務器 郵件服務器的功能是發送和接收郵件,同…

面向對象的接口類 以及鴨子類型

1.接口類,抽象類. 2.鴨子類型(Python多態)(Python三大特性之一)Python封裝 1.接口類和抽象類只是在工作中書寫的一種規范. class QQ: def pay(self,money): print("使用QQ支付%s"%money) class Ali: def pay(self,money): print("使用支付寶支付%s"%money…

mysql查看binlog日志內容

2019獨角獸企業重金招聘Python工程師標準>>> (一) binlog介紹 binlog,即二進制日志,它記錄了數據庫上的所有改變,并以二進制的形式保存在磁盤中; 它可以用來查看數據庫的變更歷史、數據庫增量備份和恢復、Mysql的復制&…

架構師:我們需要頂層設計

架構師:我們需要頂層設計背景: 某公司,建立的程序又被推倒,外人覺得很奇怪,這個程序的主管非常敬業,關注到了程序每一個細節,甚至包括每一個按鈕的文字和位置。這個主管很委屈,他說…

文件傳輸協議FTP

文件傳輸協議FTP提供交互式的訪問,允許客戶指明文件的類型和格式,并允許文件具有存取權限。它屏蔽了個計算機系統的細節,因而適合于在異構網絡中任意計算機之間傳輸文件。它提供不同種類主機系統之間的文件傳輸能力,可以提供用戶對…

Centos7安裝Docker教程

1.首先安裝必要依賴: sudo yum install -y yum-utils device-mapper-persistent-data lvm22.然后添加倉庫源: sudo sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.最后安裝 Docker&#xff…

String.format() 方法用法解說

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 String chargeFlowUrl _AGENT_URL "?agentAccount" _AGENT_ACCOUNT "&sequence%s &phone%s &iceUrl%s &…

Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 錯誤的解決

大意是Log4jConfigListener在獲取webapp.root值時&#xff0c;被后一context的值替換掉了&#xff0c;所以要在各個項目的web.xml中配置不同的webAppRootKey值&#xff0c;隨即在其中一個web.xml中添加&#xff1a; <context-param> <param-name>webAppRootKey<…

ionic3 cordova ionic-native插件

ionic-native插件 cordova安裝插件 以及 ionic-native插件使用過程以及步驟 cordova plugin add cordova-plugin-插件名稱。 //安裝插件npm install ionic-native/對應插件名稱 --save。 //寫入package.json在app.module.ts 的 providers 進行引用解釋&#xff1a;cordove plug…

Diango博客--19.使用 Docker部署項目到線上服務器

文章目錄1.克隆代碼到服務器2.創建環境變量文件用于存放項目敏感信息3.在 .production 文件寫入下面的內容并保存4.修改 Nginx 配置5.修改項目配置文件6.啟動容器7.檢查容器啟動狀況8.配置 HTTPS 證書&#xff08;沒有配置域名無法配置&#xff0c;只能通過服務器 ip 以 HTTP 協…

從一生的角度看程序員的學習和發展

很多人談學習和發展的時候&#xff0c;往往忽略人的先天自然條件&#xff0c;在這里我們從這個視角切入&#xff0c;來探討一下程序員一生的可能軌跡。 如果把程序員的人生分為三個階段&#xff0c;那么他們是&#xff1a; 畢業~30歲&#xff1a;這個時間段里&#xff0c;大多…

Jquery Datatable 數據填充報錯:requested unknown parameter ‘XXX‘ for row xx, column xx 解決方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如圖&#xff1a; 解決方法見官網&#xff1a;https://datatables.net/manual/tech-notes/4 摘要如下&#xff1a; Parameter is an…