前言
前面已經讓 RT-Thread 進入了 entry 入口函數,并且 調整 鏈接腳本,自動初始化與 MSH shell 的符號已經預留, 進入了 RT-Thread 的初始化流程
接下來:從 內存管理、系統tick 定時器、適配串口 uart 驅動三個模塊入手,讓RT-Thread 真正運行起來
系統tick定時器
可以稱之為 操作系統的心跳,一般是個周期性的定時器,比如 1ms 為周期,周期性的執行。
通過驗證,mps2-an385 支持 systick 定時器,簡單配置后,就可以實現 系統 tick 定時器功能
修改完善 drv_common.c
#include
#include
#include "CMSDK_CM3.h"
#include "system_CMSDK_CM3.h"
static uint32_t _systick_ms = 1;
/**
This is the timer interrupt service routine.
/
void SysTick_Handler(void)
{
/ enter interrupt /
rt_interrupt_enter();
rt_tick_increase();
/ leave interrupt /
rt_interrupt_leave();
}
/ SysTick configuration */
void rt_hw_systick_init(void)
{
SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
NVIC_SetPriority(SysTick_IRQn, 0xFF);
_systick_ms = 1000u / RT_TICK_PER_SECOND;
if(_systick_ms == 0)
_systick_ms = 1;
}
rt_hw_systick_init 當前被 board.c 中的 rt_hw_board_init 調用,而 rt_hw_board_init 又被 RT-Thread rtthread_startup 調用, rtthread_startup 被 RT-Thread 入口函數 entry 調用,這個 entry 又被 啟動文件 Reset_Handler 調用,Reset_Handler 是 MCU 上電執行的函數。
初始化 rt_hw_systick_init 后,VS Code gdb 調試,發現可以周期性進入 SysTick_Handler,也就是 systick 定時器的中斷處理函數,在這個函數中,執行 rt_tick_increase,基于時間片的系統調度、系統定時與延時等,都依賴 系統 tick 定時器,也就是移植 RT-Thread,必須有周期性 tick 定時器
系統內存管理
./qemu.sh 運行信息
以上,說明RT-Thread qemu mps2-an385 bsp 制作初步完成,當前初步驗證,無法支持文件系統,并且其他的外設欠缺資料,因為移植宣告完成。 可以通過 VS Code gdb 調試,熟悉 RT-Thread 系統調用、內存分配、測試驗證各個 RT-Thread 功能模塊
小結
本篇通過 bsp 適配 內存管理、串口驅動、系統 tick 定時器,讓 RT-Thread 跑起來,qemu mps2-an385 bsp 在 RT-Thread 上移植適配完成。
-
RAM
+關注
關注
8文章
1369瀏覽量
114808 -
定時器
+關注
關注
23文章
3253瀏覽量
115063 -
UART接口
+關注
關注
0文章
124瀏覽量
15316 -
RT-Thread
+關注
關注
31文章
1299瀏覽量
40258 -
gdb調試器
+關注
關注
0文章
10瀏覽量
1104
發布評論請先 登錄
相關推薦
評論