RT-Thread学习
文章目录
- 前言
- 一、rtt的启动流程
- 二、移植工作
- 总结
前言
RT-Thread学习,这里记录对bsp的移植
一、rtt的启动流程
RT-Thread 支持多种平台和多种编译器,而 rtthread_startup() 函数是 RT-Thread 规定的统一启动入口。一般执行顺序是:系统先从启动文件开始运行,然后进入 RT-Thread 的启动函数 rtthread_startup() ,最后进入用户入口函数 main(),如下图所示:
入口函数存放在该目录 rt-thread/src/components.c
…/src/klibc/ 目录存放内核库文件,跟标准c库相关的
…/src/ 目录存放着内核实现的源码
rt_hw_interrupt_disable(), rt_hw_board_init(), rt_system_schedular_star() 这三个函数是关键,决定板子的中断初始化,板级设置初始化,系统调度初始化。
rt_hw_interrupt_disable() 和 rt_system_schedular_star() 主要是跟架构相关的东西,rtt中在 /libcpu/ 下可以查看。对于riscv架构的在 rt-thread/libcpu/risc-v 这个目录下
cvitek 下 使用的 cv18xx 用的是 riscv c906 架构cpu,这是个64位的cpu,所以应该参考…/common64/
使用 SConscript.py 来控制编译(生成汇编文件),Kconfig 来控制板子配置信息,rtconfig 来填充Kconfig。
二、移植工作
移植流程
- 移植并处理启动文件
- 将芯片架构的几个文件编译进来,rtt实现了基本的调度和中断等
- 完成rt_hw_board_init函数,不同的芯片这个函数不同
确保一个板子可以运行rtt,需要完成下列工作- 配置定时器为系统提供心跳时钟,一般来说是Systick滴答定时器
- 配置时钟系统,保证系统的正常运行
- 根据板子的flash或者ram的情况来配置系统堆的空间
- 最基本的pin驱动和uart驱动,
在 rt-thread/bsp/cvitek/cv18xx_risc-v/board/board.h 这个目录下
堆空间在bss段末尾开始,堆空间的末尾是页的开始
需要修改 bsp/xxx/board/Kconfig 来适配芯片
bsp/xxx/board/ports 是xxx这个板子的端口的配置,可以修改删除
rtthread.py