RT-Thread移植到STM32F103ZET6具体操作步骤(利用keil5新建工程,添加RT-Thread源码到工程)
RT-Thread移植(基于STM32F103ZET6)
因为学习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
- 文件就在原文件夹application下
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
- 这些文件在bsp目录下都可以找到
components : components.c
- 在components/init目录下
DeviceDrivers : DeviceDrivers >>> driver >>> src 下的全部文件 DeviceDrivers >>> driver 下用到哪个设备框架就加哪个设备原文件(这里加了serial,因为要用到串口)
- DeviceDrivers >>> driver 目录下都可以找到
contex-m3 : backtrace.c div0.c showmem.c context_rvds.S cpuport.c
- libcpu目录下都可以找到
RT-Thread-2.0.1 :RT_Thread-2.0.1 >>> src 目录下所有文件
- RT_Thread-2.0.1 >>> src 目录下可以找到
finsh : components >>> finsh目录下所有*.c文件
- components >>> finsh目录下都能找到
Drivers : board.c led.c usart.c
- bsp >>> drivers目录下都可以找到
- 设置生成hex文件
- 点击build按钮
- 编译完后0错误1警告
libcup\cortex-m3\context_rvds.S(206): warning: A1581W: Added 2 bytes of padding at address 0xd6
之后再按build 0错误0警告
- 把生成的hex文件烧写进板子
- 打开SecureCRT连接串口,按下复位
LED灯在闪烁
RT-Thread移植到STM32F103ZET6具体操作步骤(利用keil5新建工程,添加RT-Thread源码到工程)相关推荐
- java监听mysql某张表的insert操作_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图
一:背景 1. 讲故事 最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlser ...
- 安卓带步骤的手写签名(附源码)
之前写的一个带笔画记录功能的安卓画板,最近才有时间写个博客好好介绍一下,参考了一些博客,最后使用了 kotlin 实现的,虽然用起来很爽,可是过了一段时间再看自己都有点懵,还好当时留下的注释非常多,有 ...
- tomcat依赖导入步骤_图说tomcat(三)导入tomcat源码到idea
前面两篇文章中我们提到了寻找tomcat的main函数,还有tomcat的启动加载过程,第一个还好,基本上都是通过.sh文件来看的,但第二个如果直接通过文本打开java文件就有点痛苦了,可能小伙伴看的 ...
- Unity3d C#通过使用大华SDK控制大华摄像头旋转、变焦等云台操作和预置点等控制操作(含源码)
前言 本文的内容和在之前我写过Unity3d C# 接入海康威视摄像头SDK实现接口控制功能(如:控制云台)的文章基本类似,同样是通过官网提供的SDK进行开发,只不过针对的设备不同,和部分实现细节不同 ...
- quado编辑Android代码步骤,Ubuntu11.10下编译android内核源码
编译android源码时并不会自动编译android内核,因此需要手动编译这部分代码.编译内核所用的时间比编译android源码要少得多,只需一会就编译完成. 1.确定内核版本 进入存放android ...
- pbp 读取 mysql数据_SqlAlchemy 中操作数据库时session和scoped_session的区别(源码分析)...
原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalch ...
- 利用python进行数据可视化操作之描点连线(附python源码)
作者:非妃是公主 专栏:<python学习> 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 更具表格中的数据,画出相应的折线图: 时间 国民总收入(亿元) 1952 679. ...
- Windows7/10上快速搭建Tesseract-OCR开发环境操作步骤
之前在https://blog.csdn.net/fengbingchun/article/details/51628957 中描述过如何在Windows上搭建Tesseract-OCR开发环境,那时 ...
- windows10 vs2013控制台工程中添加并编译cuda8.0文件操作步骤
一般有两种方法可以在vs2013上添加运行cuda8.0程序: 一.直接新建一个基于CUDA8.0的项目:如下图所示, 点击确定后即可生成test_cuda项目:默认会自动生成一个kernel.cu文 ...
最新文章
- R语言使用cowplot包的plot_grid函数将两个ggplot2可视化结果并排组合起来并添加图像标签A、B、设置组合图像使用共享的图例(shared legend in cowplot)
- java 对象自定义排序_java – 使用自定义排序顺序对对象的ArrayL...
- redhat6.4中手动创建oracle11g数据库
- zippo油和zorro油的区别_陶瓷轴承润滑油的性能质量最指标油的区别?_搜狐汽车...
- 【CV】基于UNet网络实现的人像分割 | 附数据集
- frida的用法--Hook Java层类方法
- 【探秘ES6】系列专栏(二):迭代器和for-of循环
- 提升Python程序性能的7个习惯
- python怎么算积分_python计算积分
- 【转】Freeglut 2.6.0 + VS2008下配置方法
- 18. PHP 表单验证
- cordova自定义插件步骤
- Android应用内存泄露分析以及优化方案
- gps显示服务器离线,GPS离线的几大原因分析及解决方法
- kuka机器人码垛编程网盘_kuka机器人循环指令码垛编程探索
- 记升级springboot1.X 到springboot2.3.5踩的坑
- 用Java打印九九乘法表
- 大数据行业前景_大数据未来展望
- 6.7 【实例】窗口查看器
- 2.12美团点评技术
热门文章
- 构建之法第5词作业(12-15章)
- 5.jsp中动态include与静态include的区别
- 复利计算5.0——结对(总结)
- Kafka的消息格式
- Linux服务器网卡驱动安装及故障排除(转)
- Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
- 一些设计思想的汇集(2)
- Windows栈溢出原理
- Linux操作系统ssh默认22端口修改方法
- 关于IB_DESIGNABLE / IBInspectable的那些事