1、获取RT-Thread源码
首先到rtthread官网下载rt-thread nano后解压
解压后打开后内容如下。
2、系统结构
各文件夹的作用如下:
文件夹 | 描述 |
bsp | 板级支持包 |
components/finsh | RT-Thread组件 |
docs | 文档信息 |
include | 头文件 |
libcpu/arm | 与arm处理器相关的接口文件 |
libcpu/risc-v | 与risc-v处理器相关的接口文件 |
src | RT-Thread内核源码 |
bsp里面存放了不同板子的示例,只需要保留board.c
和rtconfig.h
这两个配置文件即可,其他的均可删除。
docs存放了移植教程的地址,可以删掉。
libcpu里存放与处理器相关的接口文件,因为本次是移植到STM32F407,所以只需要保留libcpu/arm/cortex-m4这一个文件夹即可,其他皆可删除。
3、移植RT-Thread
3.1、添加源码
移植RT-Thread到keil的STM32407工程。首先打开STM32F407的keil工程,打开工程项目管理 Manage Project Items,新建文件夹,并将下列c文件添加到文件夹中。
- 添加bsp文件中的board.c、rtconfig.h文件
- 添加src文件夹中的所有.c文件
- 添加libcpu\arm\cortex-m4文件夹下的context_rvds.S和cpuport.c文件
注:文件夹名称可以自己定义。
3.2、添加头文件目录
打开项目设置对话框,在C/C++选项卡中添加下图所示的头文件路径。
头文件路径如下:
- \components\finsh
- \include\libc
- \includ
- \bsp
注:如果board.c、rtconfig.h文件挪动到其它目录,确保将该目录添加进去。
4、编译工程
编译后发现没有RTE_Components.h这个文件,头文件 RTE_Components.h是在 MDK中添加 RT-Thead Package 时由 MDK 自动生成的,目前我们没有使用 MDK 中自带的 RT-Thread 的 Package,所以这个头文件不存在,如果包含了该头文件,编译的时候会报错,需要修改 rtconfig.h 头文件,将相关代码注释掉。
打开rtconfig.h找到#include "RTE_Components.h"将其注释
再编译,报告3个错误:
因为RT-Thread系统把这三个中断函数已经实现了,但是在stm32f10x_it.c这个文件中,也有这个三个中断函数,但是函数内是空的,没有实现。需要将 stm32f4xx_it.c 文件中的这个三个中断函数注释掉。
因为我的工程中原先移植了其它操作系统,所以要把原来操作系统中的对应函数注释掉。如果暂时未应用RT-Thread,也可以在context_rvds.S中注释掉这几个函数。
5、使用RT-Thread
5.1、添加头文件
在工程中应用RT-Thread系统的头文件。
#include <rthw.h>
#include <rtthread.h>
5.2、使能RT_USING_HEAP定义
RT-Thread中习惯使用动态内存堆新建线程,因此在rt_config.h
中取消掉#define RT_USING_HEAP
的注释。如果不取消,则任务和信号创建等函数都不会定义(h文件有声明)。