www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > wenzi嵌入式軟件
[導(dǎo)讀]前言 rtthread 是一個功能強大,組件豐富的物聯(lián)網(wǎng)操作系統(tǒng)。它相比于其他的 RTOS 的一個主要區(qū)別之一,也就是它不僅僅是一個實時內(nèi)核,還具備豐富的中間層組件。那對于 rtt 來講,它又是如何管理和構(gòu)建工程的呢?下面筆者將從一個工程的目錄結(jié)構(gòu)開始來進(jìn)行闡

前言

rtthread 是一個功能強大,組件豐富的物聯(lián)網(wǎng)操作系統(tǒng)。它相比于其他的 RTOS 的一個主要區(qū)別之一,也就是它不僅僅是一個實時內(nèi)核,還具備豐富的中間層組件。那對于 rtt 來講,它又是如何管理和構(gòu)建工程的呢?下面筆者將從一個工程的目錄結(jié)構(gòu)開始來進(jìn)行闡述。

工程目錄結(jié)構(gòu)

下圖是一個STM32f4 基于 rtt 的一個工程目錄:

目錄結(jié)構(gòu)


這個目錄所包含的文件夾的具體功能也能夠從其文件夾名得知,這里筆者簡單的說一下:

  • .vscode:這個 文件夾所包含的是當(dāng)前 vscode 環(huán)境的一些設(shè)置,如果沒有這個文件夾,那么在閱讀代碼的時候,就會出現(xiàn)好多頭文件找不到的情況。

  • applications:這個文件夾是用戶應(yīng)用程序所在的文件夾,main.c 就在這個文件夾下,如果用戶的應(yīng)用程序不是很多的情況下,那么都可以將其放到這個文件夾下。

  • board:針對于 STM32 來講,在使用 rtt 的時候,采用的是 CubeMX 來配置單片機外設(shè)的功能,這個文件夾存放的就是經(jīng)過 CubeMX 配置之后的相關(guān)文件。

  • libraries:在配置單片機外設(shè)的時候,我們無外乎會使用到單片機的庫,針對于 STM32 來講,存在標(biāo)準(zhǔn)庫,也有 HAL 庫,這里使用的是 HAL 庫,所以這個文件夾下面存放的是 HAL 庫的相關(guān)文件。

  • packages:rtt 存在豐富的軟件包,這個文件夾存放的就是我們使用的軟件包的相關(guān)文件。

  • rt-thread:這個文件夾存放的就是 rtt 內(nèi)核以及組件的相關(guān)文件。

  • rtconfig.h:這個是極為關(guān)鍵的一個文件,rtt 進(jìn)行內(nèi)核裁剪實際上也就是通過這個文件里的宏定義來關(guān)閉或者打開 rtt 所具備的功能。

rtconfig.h 文件配置

上述我們介紹了基于 rtt 的一個 STM32 的工程目錄,緊接著我們來看 rtconfig.h 文件,這個文件里存放的全是宏定義,換句話說就是通過在這個文件里增加或者刪減相關(guān)宏定義從而實現(xiàn) rtt 的相關(guān)功能。最為直觀的修改方法便是手動修改了,直接在 rtconfig.h 文件里敲代碼解決。另一種方法便是 rtt 引入的一種自動修改的機制,也就是引入的 Env 工具,Env 工具如何使用就不在這里闡述了,官方文檔有詳細(xì)地介紹。那如何通過 Env 工具來配置 rtconfig.h 文件呢,通過在 Env 里輸入 menuconfig 命令,會出現(xiàn)下圖所示的界面,通過圖形化的操作就可以實現(xiàn)相關(guān)的配置。

menuconfig界面


通過這個界面我們來選擇要使用的組件以及相關(guān)的軟件包,而上圖這個界面里的內(nèi)容又是和 kconfig 文件相對應(yīng)的,也就是說我們可以通過 kconfig 文件來配置我們的 menuconfig 界面,然后通過 menuconfig 界面來配置及我們的 rtconfig.h 文件,舉一個簡單的例子說明這個問題,我們通過 CubeMX 配置了單片機的相關(guān)外設(shè),那如果要在 rtt 中使用這個外設(shè)的相關(guān)功能,那么我們就需要在 rtconfig.h 中開啟相關(guān)的宏定義,但是這個時候 menuconfig 中還沒有關(guān)于這個外設(shè)的相關(guān)選項,那么就需要在 kconfig 文件里進(jìn)行設(shè)置,假設(shè)我們要使用 GPIO 的功能,那么相關(guān)內(nèi)容如下所示:

kconfig文件


menuconfig 界面所對應(yīng)的內(nèi)容如下圖所示:

menuconfig 界面


在 menuconfig 界面選擇了之后,我們再來看 rtconfig.h 里對應(yīng)的宏定義。

rtconfig.h


上圖的左邊是 kconfig 文件,右邊是 rtconfig.h 文件,可以看到是一一對應(yīng)的(RT_USING_PIN也是對應(yīng)的,由于不在一個位置所以沒有截圖下來)。
上述闡述了一個 kconfig 文件與 rtconfig.h 文件以及 menuconfig 之間的對應(yīng)關(guān)系,但是一個工程存在好多個 kconfig 文件,運行 menuconfig 的時候又是如何找到各個 kconfig 文件的呢?整個過程是這樣的,在當(dāng)前工程的根目錄存在一個 kconfig 文件,所在位置和內(nèi)容如下圖所示:

kconfig 文件


上圖中紅色方框里的內(nèi)容就是其他 kconfig 文件的路徑,因此這個文件是所有配置的總?cè)肟?,通過它找到其他 kconfig 文件。

小結(jié)

上述簡單敘述了一個 rtconfig.h 文件的配置過程,總結(jié)一下也就是在工程的根目錄下使用 env 工具執(zhí)行 menuconfig 命令時會出現(xiàn) rtt 系統(tǒng)的配置界面,所有的配置選項都是通過讀取工程根目錄下的 kconfig 文件,然后通過此文件找到其他的 kconfig 文件,從而生成配置界面,然后通過選擇配置界面的相關(guān)選項,從而實現(xiàn)在 rtconfig.h 文件里增添或者減少宏定義的目的。

scons

引用 rtt 文檔中心的一句話來介紹 scons:

scons 是一套由 Python 語言編寫的開源構(gòu)建系統(tǒng),類似于 GNU Make,它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件來替代。這些文件也是 Python 腳本,能夠使用標(biāo)準(zhǔn)的 Python 語法來編寫。所以在 SConstruct、SConscript 文件中可以調(diào)用 Python 標(biāo)準(zhǔn)庫進(jìn)行各類復(fù)雜的處理,而不局限于 Makefile 設(shè)定的規(guī)則。

使用 makefile 時,我們可以通過命令行輸入 make 來編譯工程,在使用 scons 時,同樣的道理,我們也可以使用 scons 來編譯工程,如圖所示:

scons 編譯


在 scons 的介紹里說,scons 通過 SConscript 和 SConstruct 文件來組織源碼結(jié)構(gòu),而通常來說一個項目中只有一個 SConstruct,但是會存在多個 SConscript,SConstruct 所在的位置如下圖所示:

工程目錄


可以看到 SConstruct 處在工程的根目錄下,上圖還標(biāo)識了一個文件是 rtconfig.py ,這個文件的作用是為了使得 rtt 更好地支持多種編譯器,以及方便地調(diào)整編譯參數(shù)。
再來看 SConscript ,一般來講,每個存放著源代碼的子目錄下都會放置著一個 SConscript,如果想要將自己的一些源代碼加入到 Scons 編譯環(huán)境中,一般可以創(chuàng)建或修改已有的 SConscript,它可以控制源文件的加入,并且可以指定文件的 Group,如果是在 keil 或者 iar 中開發(fā),那么通過 SConscript 文件就可以自動地添加文件或者增加 Group 到 keil 工程中,下面以 keil 工程為例說明,首先看對應(yīng)的 SConscript 文件。

SConscript


在這里不去細(xì)致地分析每一個語句,文檔中心有詳細(xì)地敘述,以 keil 為例,SConscript 中箭頭所指向的 group 在 keil 中所體現(xiàn)的就是加入到 keil 中的工程,第一個 group 中定義的 group 名稱是 Applications,那么所對應(yīng)的在 keil 工程中就有一個 Applications 的 group。第二個 group 中定義的 group 名稱是 Drivers,那么所對應(yīng)的在 keil 中就有一個 Drivers 存在,如下圖所示:

keil 工程目錄


其他 group 的添加原理也是類似的,同樣的,SConscript 還能夠控制將什么文件加到其對應(yīng)的 group 中,在 SConscript 中, src 變量控制的就是文件的加入,以 Application 下的文件為例,如下圖所示:

src


可以看到這里的 src 所代表的意思就是將當(dāng)前文件夾下的所有 .c 文件加入到 Application 中,這里也可以控制指定的文件加入到對應(yīng)的 group 中。
這里需要注意的一點是我們通過編輯 SConscript 文件,來控制文件和 group 的加入,在 keil 中開發(fā)的話,我們會在 Env 中輸入 scons --target=mdk5 來創(chuàng)建我們的工程,這個時候,我們要添加的文件或者 group 就會自動地添加到工程中了,如果這個時候,手動的往 keil 中添加文件或者 group 時,那么在下次運行 scons --target=mdk5 時就會將之前手動添加到 keil 工程的文件或 group 刪除掉。另外,如果在 keil 中開發(fā)時,有一些 keil 本身的設(shè)置需要進(jìn)行更改,那么為了避免重新生成工程時將修改的記錄覆蓋掉,這個時候就應(yīng)該在 template 這個工程中進(jìn)行設(shè)置,這樣進(jìn)行更改后,即便重新生成工程了,但是關(guān)于 keil 的配置依舊保留著,工程所在位置如下圖所示:

模板工程


同時,scons 還能夠生成 vs code 工程,運行 scons --target=vsc 就能夠更新 vs code 工程的相關(guān)配置,從而更新 vs code 的相關(guān)頭文件設(shè)置。

總結(jié)

上述就是關(guān)于 RTT 管理和構(gòu)建工程的相關(guān)內(nèi)容了,總結(jié)一下也就是涉及到 kconfig 文件的更改,從而能夠通過 menuconfig 圖形化的配置相關(guān)選項,最終能夠生成 rtconfig.h 中的相關(guān)宏定義。同時,RTT 采用 scons 來進(jìn)行構(gòu)建工程,通過 SConscript 控制文件和 group 加入到工程中進(jìn)行編譯。另一方面,上述內(nèi)容所涉及的語法雖然不是采用的 C 語言,但是在 rtt 中所涉及的語法中也比較容易,通過閱讀官方文檔中心的相關(guān)內(nèi)容也就能夠運用起來了,好了,這次的分享內(nèi)容就是這些啦~

如果覺得文章對您有幫助,歡迎點擊再看支持一下吶~

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉