电子说
前言
前面已经让 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 上移植适配完成。
全部0条评论
快来发表一下你的评论吧 !