RT-Thread 的 CPU 固件移植理解
@[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。
在 CubeMX 生成的文件中除了上面提到的 HAL 庫外還有一個叫 CMSIS 的文件夾。
CMSIS(微控制器軟件接口標準,Cortex Microcontroller Software Interface Standard)是 ARM 官方設計的驅動包,框圖如下:
ARM 推出 CMSIS 軟件包意在統一各大芯片廠商的外設驅動,DSP 數字信號處理,下載器和各個主流 RTOS 的 API 統一。幾年下來,各個廠商一直是各自為戰,所以 CMSIS 的驅動一直沒有被各個芯片廠商采用。
任務調度 嵌入式
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。