天天看點

STM32完美移植RT-Thread實時作業系統

STM32完美移植RT-Thread實時作業系統

官網下載下傳RT-Thread nano:下載下傳 - RT-Thread物聯網作業系統

解壓打開下載下傳檔案夾

打開自己的裸闆檔案夾

STM32完美移植RT-Thread實時作業系統

在自己的裸闆檔案夾中建立RT-THREAD,在RT-THREAD下建立RT-include、RT-port、RT-source(名字自己定)

STM32完美移植RT-Thread實時作業系統

再打開USER建立boaed檔案夾

STM32完美移植RT-Thread實時作業系統

下面開始複制相關檔案

打開RT-Thread——bsp——stm32f103-msh——RTE——RTOS——複制board.c和rtconfig.h到自己的檔案夾USER——board下

STM32完美移植RT-Thread實時作業系統

在USER——board下建立board.h

打開下載下傳檔案夾的src——複制全部檔案到自己檔案夾RT-Thread——RT-source下

STM32完美移植RT-Thread實時作業系統

打開下載下傳檔案的libcpu——arm——cortex-m3下複制context_rvds.S和cpuport.c檔案到自己檔案夾的RT-Thread——RT-port下

STM32完美移植RT-Thread實時作業系統

打開下載下傳檔案的include下複制全部檔案到RT-Thread——RT-include下

再打開下載下傳檔案的components下複制兩個檔案夾到RT-Thread——RT-include下

STM32完美移植RT-Thread實時作業系統
STM32完美移植RT-Thread實時作業系統

至此所有檔案複制完畢

打開工程添加檔案

點選

STM32完美移植RT-Thread實時作業系統

先添加如下檔案夾

STM32完美移植RT-Thread實時作業系統

在USER下添加

STM32完美移植RT-Thread實時作業系統

在RT-port下添加

STM32完美移植RT-Thread實時作業系統

在RT-source下添加

STM32完美移植RT-Thread實時作業系統

在RT-include下添加所有剛剛建立檔案夾下的檔案,包括複制過來的兩個檔案夾下的檔案

STM32完美移植RT-Thread實時作業系統

再點選

STM32完美移植RT-Thread實時作業系統

選擇C/C++

添加路徑

STM32完美移植RT-Thread實時作業系統

打開stm32f1xx_it下找到如下函數,屏蔽

STM32完美移植RT-Thread實時作業系統
STM32完美移植RT-Thread實時作業系統

打開board.c找到如圖函數

STM32完美移植RT-Thread實時作業系統

點選SystemCoreClock找到本體更改合适頻率系統頻率

STM32完美移植RT-Thread實時作業系統

再把系統時鐘函數添加到此函數中

STM32完美移植RT-Thread實時作業系統

打開更改建立的board.h添加如下代碼(sys.h中是系統時鐘頻率初始化和頭檔案#include “stm32f1xx.h”)然後在board.c下添加頭檔案#include “board.h”

STM32完美移植RT-Thread實時作業系統

再打開rtconfig.h更改相關參數,根據需要改

#define RT_THREAD_PRIORITY_MAX 8

//表示 RT-Thread 支援多少個優先級,取值範圍為 8~256,預設為 32。

#define RT_TICK_PER_SECOND 1000

//表示作業系統每秒鐘有多少個 tick即是作業系統的時鐘周期,預設為 1000,即作業系統的時鐘周期 tick 等于 1ms。

#define RT_ALIGN_SIZE 4

//表示 CPU 處理的資料需要多少個位元組對齊,預設為 4 個位元組

#define RT_NAME_MAX 8

//表示核心對象名字的最大長度,取值範圍為 2~16,預設為 8。

#define RT_USING_COMPONENTS_INIT

//RT-Thread 元件初始化,預設使能

#define RT_USING_USER_MAIN

//使用使用者 main 函數,預設打開

#define RT_MAIN_THREAD_STACK_SIZE 512

// main 線程棧大小,取值範圍為 1~4086,機關為位元組,預設為512

#define RT_DEBUG_INIT 0

//調試配置。包括了核心調試配置,元件調試配置和線程棧溢出檢測,目前全部關閉

#define RT_USING_TIMER_SOFT 0

//軟體定時器配置,目前關閉,不使用軟體定時器

#define RT_USING_SEMAPHORE

//内部通信配置,包括信号量、互斥量、事件、郵箱和消息隊列,根據需要配置

#define RT_USING_SMALL_MEM

//記憶體管理配置

參考網址:http://forum.eepw.com.cn/thread/316958/1/

#define RT_USING_CONSOLE

//控制台配置。控制台即是 rt_kprintf()函數調試輸出的裝置,通常使用序列槽。

修改board.c,board.c 是直接從 RT-Thread/3.0.3/bsp 檔案夾下面拷貝過來的, 裡面存放的是與硬體相關的初始化函數,

static uint32_t _SysTick_Config(rt_uint32_t ticks)

//相關的寄存器定義和初始化函數,這個是跟處理器相關的,直接使用固件庫函數,将其注釋。

void *rt_heap_begin_get(void) void *rt_heap_end_get(void)

//RT-Thread 堆配置,如果同時定義了 RT_USING_USER_MAIN 和RT_USING_HEAP 這兩個宏, 表示 RT-Thread 裡面建立核心對象時使用動态記憶體配置設定方案。

void rt_hw_board_init()

//RT-Thread 啟動的時候會調用一個名為 rt_hw_board_init()的函數,從函數名稱我們可以知道它是用來初始化開發闆硬體的,比如時鐘,比如序列槽等。

void SysTick_Handler(void)

//SysTick 中斷服務函數是一個非常重要的函數, RT-Thread 所有跟時間相關的事情都在裡面處理。

找到finsh_port.c屏蔽//#error “TODO 4: Read a char from the uart and assign it to ‘ch’.”

然後編譯,沒有問題

最後在主函數下添加頭檔案

STM32完美移植RT-Thread實時作業系統

OK,可以完美使用