核心入門(一) 初識RT Thread

2021-10-23 04:28:52 字數 2321 閱讀 6566

三、rt-thread原始碼檔案

四、工程檔案

rt-thread是乙個嵌入式實時多執行緒作業系統,具有非常強的可伸縮能力:從乙個可以執行在arm cortex-m0晶元上的極小核心,到中等的arm cortex-m3/4/7系統,甚至是執行於mips32、arm cortex-a系列處理器上功能豐富系統。

rt-thread包含了乙個自有的、傳統的硬實時核心,也包含檔案系統、圖形庫等中介軟體元件,同時具備低功耗、安全、通訊協議支援和雲端連線能力的軟體平台。

rt-thread的架構如下圖所示:

官網:論壇:qa/forum.php

github:

rt-thread 核心採用物件導向的設計思想進行設計,系統級的基礎設施都是一種核心物件,例如執行緒,訊號量,互斥量,定時器等。

從記憶體分配上,核心物件分為兩類:靜態核心物件和動態核心物件。

靜態核心物件通常放在rw 段和zi 段中,在系統啟動後在程式中初始化;會占用ram 空間,不依賴於記憶體堆管理器,記憶體分配時間確定。

動態核心物件則是從記憶體堆中建立的,而後手工做初始化,依賴於記憶體堆

管理器,執行時申請ram 空間,當物件被刪除後,占用的ram 空間被釋放。

從功能定義上,核心物件包括:執行緒,訊號量,互斥量,事件,郵箱,訊息佇列和定時器,記憶體池,裝置驅動等。物件容器中包含了每類核心物件的資訊,包括物件型別,大小等。物件容器給每類核心物件分配了乙個鍊錶,所有的核心物件都被鏈結到該鍊錶上,如圖rt-thread 的核心物件容器及鍊錶如下圖所示:

其中各類核心物件的派生和繼承關係:

rt-thread 的乙個重要特性是高度可裁剪性,支援對核心進行精細調整,對元件進行靈活拆卸。配置主要是通過修改工程目錄下的rtconfig.h檔案來進行,使用者可以通過開啟/ 關閉該檔案中的巨集定義來對**進行條件編譯,最終達到系統配置和裁剪的目的。

一般mcu 包含的儲存空間有:片內flash 與片內ram,ram 相當於記憶體,flash 相當於硬碟。編譯器會將乙個程式分類為好幾個部分,分別儲存在mcu 不同的儲存區。

在arm官方支援文件中有該項說明:

當系統中存在乙個無法修改的函式(比如存在於外部庫、rom中),我們就需要用到$sub$$$super$$來對原函式進行拓展(靜態鏈結)。

$sub$$ foo

在原函式foo()的基礎上增添新函式(新功能),可以用在原函式的前面或後面。

$super$$ foo

即未經修補的原函式foo(),使用該命令直接呼叫原函式。

啟動流程如下圖所示,具體可參考工程原始碼,在《rt_thread程式設計指南》中也有詳述。

bsp——板級支援檔案,即各類晶元開發板的支援檔案。例如下一級的stm32l475-atk-pandora資料夾,就是正點原子潘多拉開發板的支援檔案,裡面包含了cmsis檔案、hal庫、板級支援包等,有乙個現成的led閃爍工程。另外,我們可以使用scons –dist命令,在該路徑下構建自己的工程。

components——rt-thread的各種元件,比如命令列、檔案系統、網路協議棧等.

documentation——說明文件,比如**風格、版本說明等。

examples——一些示例**。

include——rt-thread核心標頭檔案。

libcpu——各類晶元/核心移植**。

src——各類rt-thread核心源**。

tools——使用scons編譯構建時的所需相關檔案。

RT thread核心之事件

一 事件控制塊 在include rtdef.h中 ifdef rt using event flag defintions in event define rt event flag and 0x01 logic and define rt event flag or 0x02 logic or ...

RT Thread 核心小細節

訊號量 郵箱訊號 排程中斷鎖 事件訊號量是根據初始值分層的,例如訊號量建立時初始值為2,那麼可以在不釋放訊號量的情況下被獲取兩次此訊號量。釋放一次訊號量訊號量的值 semaphore value 就會加一,獲取一次訊號量的值就會減掉一,為零則不能獲取,被掛起。使用if rt mb recv mb,r...

RT Thread核心學習

一 概述 二 執行緒的組成 2.1 執行緒 入口函式 2.2 執行緒控制塊 2.3 執行緒棧 三 執行緒相關的api 3.1 執行緒的建立 3.2 狀態的切換 四 注意事項與補充 4.1 動態建立與靜態建立的優缺點比較?4.2 系統滴答時鐘頻率的選取 4.3 執行緒棧大小分配的小策略 4.4 執行緒...