RT-Thread 的 CPU 固件移植理解

      網友投稿 1078 2025-04-02

      @[TOC](RT-Thread 的 CPU 固件移植理解)


      博主介紹

      RT-Thread 的 CPU 抽象層

      在嵌入式領域有多重不同的 CPU 架構,我們知道 RT-Thread 是支持不同架構的嵌入式操作系統,我們先來大概看一下 RT-Thread 的架構。

      可以看到 RT-Thread 提供了一個 libcpu 抽象層來適配不同的 CPU 架構, libcpu 向上對內核提供統一的接口,包括全局中斷的開關,線程棧的初始化,上下文切換等。

      RT-Thread 的 libcpu 抽象層向下提供了一套統一的 CPU 架構移植接口,這部分接口包含了全局中斷 開關函數、線程上下文切換函數、時鐘節拍的配置和中斷函數、Cache 等等內容。

      接下來讓我們一起看看 RT-Thread 嵌入式系統的文件目錄:(https://github.com/RT-Thread/rt-thread)

      我手頭的開發板是潘多拉物聯網開發版,CPU 是 STM32L475VET6,去官網找到對應的文檔可以得知 CPU 架構為 Cortex-M4 架構:

      打開 rt-thread\libcpu\arm\cortex-m4 目錄會發現有如下幾個文件:

      libcpu\arm\cortex-m4 目錄下文件

      context_gcc.S

      context_iar.S

      context_rvds.S

      cpuport.c

      SConscript

      其中上面的 context_rvds.S 文件就是 RT-Thread 的對該 CPU 提供的移植接口,相關 API 如下:

      具體的如何去移植,如何去修改對應參數,建議參考《RT-Thread 編程指南》的內核移植部分內容。

      STM32CubeMX 固件工具

      STM32CubeMX 是一個圖形化的工具,可以使用該工具來很方便的配置 STM32 微處理器的相關硬件并生成底層驅動(Low-layer APIs(LL)),硬件抽象層接口(Hardware abstraction layer APIs(HAL)),板級支持包(Board Support Package(BSP))。

      概括的說,STM32CubeMX 圖形界面可以完成以下功能:

      快速簡便地配置所選外設和中間件的MCU引腳、時鐘樹和工作模式。

      為開發板設計人員生成引腳配置報告。

      生成一個完整項目,包含所有必需的庫和初始化C代碼,以在用戶定義的工作模式下設置設備。可以在選定的應用開發環境中直接打開項目(適用于一系列支持的IDE),以繼續進行應用程序開發。

      下載安裝 CubeMX,

      這里需要注意的是,該工具依賴 Java 環境,需要具備 Java 8.0 的環境,并配置環境變量,否則安裝失敗。

      RT-Thread 的 BSP

      前面我們已經看到 RT-Thread 的目錄中有一個 bsp 文件夾,BSP 框架結構如下圖所示:

      每一個 STM32 系列的 BSP 由三部分組成,分別是通用庫、BSP 模板和特定開發板 BSP,下面的表格以 F1 系列 BSP 為例介紹這三個部分:

      例如我手頭的這個潘多拉 STM32L4 開發版,在 bsp\stm32\stm32l475-atk-pandora 目錄下,我們可以在該目錄看到 board\CubeMX_Config 目錄中的 STM32CubeMX 工程,雙擊可以直接打開。

      提示,建議復制一個 CubeMX_Config 目錄再修改,可以對照前后變化。

      當然,一般情況下我們不必要修改具體開發板下面的CubteMX,因為已經和開發板配套設置好了,如果我們手頭有一款開發板還沒有納入 bsp 目錄,此時我們可以去 bsp\stm32\libraries\templates\下面尋找對應系列的模板并打開進行修改。

      在 CubeMX 工程中將芯片型號為修改為實際型號,例如: STM32F103RBTx 。

      打開外部時鐘、設置下載方式、打開串口外設(注意只需要選擇串口外設引腳即可,無需配置其他參數):

      配置系統時鐘:

      設置項目名稱,并在指定地址重新生成 CubeMX 工程:

      最終 CubeMX 生成的工程目錄結構如下圖所示:

      這里你是不是就有疑問了,生成的其余的文件夾為什么可以刪除,那是因為在 bsp\stm32\libraries\STM32L4xx_HAL\ 已經包含了 STM32 的公共固件庫(系列通用 HAL 庫)。

      而在 bsp\stm32\libraries\HAL_Drivers\ 存放的是對應的驅動文件(連接 RT-Thread 內核和 HAL 之間的橋梁) 例如我們 gpio 的驅動 drv_gpio.c。

      RT-Thread 的 CPU 固件移植理解

      在 CubeMX 生成的文件中除了上面提到的 HAL 庫外還有一個叫 CMSIS 的文件夾。

      CMSIS(微控制器軟件接口標準,Cortex Microcontroller Software Interface Standard)是 ARM 官方設計的驅動包,框圖如下:

      ARM 推出 CMSIS 軟件包意在統一各大芯片廠商的外設驅動,DSP 數字信號處理,下載器和各個主流 RTOS 的 API 統一。幾年下來,各個廠商一直是各自為戰,所以 CMSIS 的驅動一直沒有被各個芯片廠商采用。

      任務調度 嵌入式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格如何查找重復項(wps的excel怎么查找重復項)
      下一篇:倉儲管理系統
      相關文章
      亚洲一卡2卡3卡4卡乱码 在线| 久久精品国产亚洲av麻豆色欲| 亚洲欧洲校园自拍都市| 精品亚洲视频在线观看| 亚洲国产精品碰碰| 香蕉视频亚洲一级| 亚洲AV无码片一区二区三区| 亚洲AV无码一区二区三区性色| 亚洲老熟女五十路老熟女bbw| 亚洲性无码AV中文字幕| 亚洲欧美日韩自偷自拍| 亚洲乱码一区二区三区国产精品| 国产精品亚洲专区在线观看| 亚洲成_人网站图片| 亚洲性色AV日韩在线观看| 亚洲精品第一国产综合亚AV| 日韩国产精品亚洲а∨天堂免| 久久亚洲精品11p| 亚洲第一福利网站在线观看| 亚洲精品国产综合久久一线| 亚洲综合色成在线播放| 亚洲小说区图片区另类春色| 亚洲成a人片在线观看无码专区| 亚洲AV永久青草无码精品| 日韩精品亚洲人成在线观看| 亚洲激情视频网站| 国产成人亚洲合集青青草原精品| 亚洲精品国产综合久久久久紧| 婷婷国产偷v国产偷v亚洲| 亚洲精品无码久久不卡| 亚洲精品无码不卡在线播HE| 亚洲五月六月丁香激情| 亚洲人成在久久综合网站| 亚洲一卡一卡二新区无人区| 九月婷婷亚洲综合在线| 亚洲色精品aⅴ一区区三区| 亚洲人成影院在线| 亚洲人成网男女大片在线播放 | 亚洲精品精华液一区二区 | 亚洲国产精品无码中文lv| 偷自拍亚洲视频在线观看|