因为学习RT-Thread的原因,需要把RT-Thread移植到STMF103ZET6上,在RT-Thread官网下载的原文件中实际上已经STM32F10x的工程了,只需简单的几步就可以完成在STM32F103ZET6上的运行,但是这样一来就对整个原文件的结构不是很了解,但是因为是学习,所以我们就不要太在意麻烦了。本文利用Keil5,新建一个工程,然后在工程中添加RT-Thread中的文件。
因为自身水平有限,所以可能工程建立的各个文件结构不是特别合理,或者还有很多地方的设置没有到位,但是这就是我目前对各个文件的理解,所以仅供参考。本文中有些文件不知道有什么作用,所以有些文件的添加参考了官网给的工程。待日后学的更加深入的时候,再来修改文中不合理的地方,还望谅解。
一、在RT-Thread官方网上下载操作系统源码(https://www.rt-thread.org/page/download.html)
这里我下载的是2.0.1版本,文件结构如下:
Bsp ---- 板级支持包,针对不同的板子规划出的不同的驱动文件;
components ---- 包含RT-Thread的各个组件:finsh、文件系统,等等*;
documentation ---- 一些介绍性文档,包括代码的风格要求;
examples ---- 各种示例代码,是很好的学习素材;
include ---- 一些头文件;
libcpu---- 各种CPU体系结构下的相关移植;
src ---- RT-Thread内核核心代码;
tools ---- 使用Scon自动化创建工具时需要的一些文件;
AUTHORS ---- RT-Thread开发者列表;
COPYING ---- 权限说明;
*:我的理解是就相当与功能扩展,比如你需要finsh就加进去,不用就不加,这样可以减少最后可执行文件的体积,在这里我们使用了finsh,方便学习,也正好学习怎么添加组件。
二、建立工程文件夹(RT-Thread2.0.1_STM32F103ZE )
1、在桌面上建立一个 RT-Thread2.0.1_STM32F103ZE 文件夹;
2、打开 RT-Thread2.0.1_STM32F103ZE 文件夹,建立以下文件夹:
application :存放应用程序
bsp :存放板级支持包和底层驱动
components :存放操作系统组件
DeviceDrivers :设备框架
libcup :各种不同CPU的内核代码
MDK-OBJ :存放kile5在编译过程中生成的中间文件
RT_Thread-2.0.1 :存放操作系统的相关文件
完成后如下图所示:
3 打开kile5建立工程
目录定位到桌面上的 RT-Thread2.0.1_STM32F103ZE 过程名称为 RTT_F103ZE 选择芯片 ST32F103ZE
Options for Target >>> Target >>> 设置外部晶振8.0MHz
Options for Target >>> Output >>> Select Folder for Objects >>> 定位到 桌面:RT-Thread2.0.1_STM32F103ZE\MDK-OBJ目录下
Options for Target >>> Listing >>> Select Folder for Objects >>> 定位到 桌面:RT-Thread2.0.1_STM32F103ZE\MDK-OBJ目录下
Options for Target >>> c/c++ >>> 添加宏定义 STM32F10X_HD, USE_STDPERIPH_DRIVER(逗号隔开)
Options for Target >>> Linker >>> Misc controls >>> 添加 --keep __fsym_* --keep __vsym_* --keep __rt_init*(保证编译时不会滤除掉工程没有调用的代码)
暂时就这样,其余项保持默认就好,等在工程目录下添加完文件后再建立工程结构,和添加头文件搜索路径就好了;
4 开始添加各个文件(根据之前建立的工程文件夹中的目录含义添加文件,这样比较有条理)
以下我就以文件路径来表示复制过程
2.0.1\bsp\stm32f10x\applications >>> Desktop\RT-Thread2.0.1_STM32F103ZE\application
application.c 、startup.c
2.0.1\bsp\stm32f10x >>> Desktop\RT-Thread2.0.1_STM32F103ZE\bsp
drivers 、Libaries
2.0.1\bsp\stm32f10x >>> Desktop\RT-Thread2.0.1_STM32F103ZE\RT_Thread-2.0.1
rtconfig.h
2.0.1\components >>> Desktop\RT-Thread2.0.1_STM32F103ZE\components
除drivers外的全部文件
2.0.1\components >>> Desktop\RT-Thread2.0.1_STM32F103ZE\DeviceDrivers
drivers
2.0.1\libcpu\arm >>> Desktop\RT-Thread2.0.1_STM32F103ZE\libcup
common 、cortex-m3
2.0.1 >>> Desktop\RT-Thread2.0.1_STM32F103ZE\RT_Thread-2.0.1
src 、include
这里在 2.0.1\components目录下有一个叫drivers 的文件夹,按照他的意思应该是设备驱动框架相关文件,但是有一点不理解为什么放在组件文件夹下;所以在复制过程中我把它单独拿了出来,放在了Desktop\RT-Thread2.0.1_STM32F103ZE\DeviceDrivers文件夹下,比较适合我来理解,该目录下还有一个叫CMSIS的文件夹,暂时也不知道是干什么的,就一起放在Desktop\RT-Thread2.0.1_STM32F103ZE\components下了;在2.0.1\bsp\stm32f10x 目录下也有一个叫 drivers 的文件夹,这个文件夹实际上就是存放了符合设备框架的板级驱动,这样应用程序就可以控制各种设备了。我们以后也可以写自己的板级驱动,然后这样在应用中就可以调用不同的设备。这里工程的架构差不多就出来了,打开之前建立的工程,打开Manage Project Items开始添加文件
5 添加工程文件以及设置头文件搜索路径
首先Groups设置如下:
这里可以看到和我的文件夹的关系很像(都有application,bsp,components...而且作用都像字面意思一样),这里应该是我自己的习惯吧,这样添加和删除文件比较简单。条理也比较清晰。
现在就是在Groups里添加原文件了
application :application.c starup.c
bsp :stm32库函数所有*.c源文件(stm32f10x_adc.c stm32f10x_rcc.c.....) core_cm3.c system_stm32f10x.c startup_stm32f10x_hd.s stm32f10x_conf.h(这里是为了比较好修改) stm32f10x_it.c
components : components.c
DeviceDrivers : DeviceDrivers >>> driver >>> src 下的全部文件 DeviceDrivers >>> driver 下用到哪个设备框架就加哪个设备原文件(这里加了serial,因为要用到串口)
contex-m3 : backtrace.c div0.c showmem.c context_rvds.S cpuport.c
RT-Thread-2.0.1 :RT_Thread-2.0.1 >>> src 目录下所有文件
finsh : components >>> finsh目录下所有*.c文件
Drivers : board.c led.c usart.c
之后再按build 0错误0警告