FreeRTOS 和 FreeMODBUS 移植到
STM32F103 傻瓜教程(Keil5)
第一部分 FreeRTOS v10.2.1 移植
一、FreeRTOS 系统简介:
FreeRTOS 是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。FreeRTOS
提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
FreeRTOS 是用 C 和汇编来写的,其中绝大部分都是用 C 语言编写的,只有极少数的与
处理器密切相关的部分代码才是用汇编写的,FreeRTOS 结构简洁,可读性很强!最主要的
是非常适合初次接触嵌入式实时操作系统学生、嵌入式系统开发人员和爱好者学习。
1、为什么学 FreeRTOS
(1.1)、因为 FreeROTS 开源。
(1.2)、FreeRTOS 免费
(1. 3)、FreeRTOS 是很多第三方组件钦定的系统!
2、 FreeRTOS 相关资料查找:
(2.1)、FreeRTOS 官网:http://www.freertos.org/。
(2.2)、开源电子网:www.openedv.com。
二、FreeRTOS 源码初探
到 FreeRTOS 官网:http://www.freertos.org/ 下载 FreeRTOSv10.2.1_191129.exe。
1、解压缩 FreeRTOSv10.2.1_191129.exe 到 WINDOWS 桌面
德阳瑞能电力科技有限公司(李清林)
1
可以观察到在 WINDOWS 桌面生成了一个 FreeRTOSv10.2.1_191129 文件夹,打开文件
夹后参见下图。
上图中有 4 个文件夹:FreeRTOS,FreeRTOS-Labs,FreeRTOS-Plus,FreeRTOS+TCP。
FreeRTOS 是 FreeRTOS 的源码,FreeRTOS-Plus 是提供的工具,比如有个 CLI,是命
令行,在命令行中我们可以输入命令来查看 FreeRTOS 系统在运行的时候查看 stack 的使用
情况。
德阳瑞能电力科技有限公司(李清林)
2
2、FreeRTOS 源码预览
上图中有三个文件夹:Demo,License,Source。从名字上就可以很容易知道它们是什
么。
(1)、Demo 文件夹
Demo 文件夹里面就是 FreeRTOS 的相关例程,打开以后参见下图:
可以看出 FreeRTOS 针对不同的 MCU 提供了非常多的 Demo,其中就有 ST 的 F1,F4
和 F7 系列的例程,我们在移植时就可以参考这些例程。
德阳瑞能电力科技有限公司(李清林)
3
(2)、License 文件夹
这个文件夹里面是一些相关的许可信息。
(3)、Source 文件夹
看名字就知道啦,FreeRTOS 源码就在这个文件夹里面,打开后如图所示:
Include 文件夹是一些头文件,移植的时候需要。.c 文件就是 FreeRTOS 源码文件,移植
的时候肯定也是需要的,下面重点看一下 portabe 这个文件夹,我们知道 FreeRTOS 是个系
统,归根到底就是个纯软件的东西,它是怎么和硬件联系在一起的呢?软件到硬件中间必须
有一座桥梁,portabe 文件夹里面的东西就是 FreeRTOS 系统和具体的硬件之间连接的桥梁!
不同的编译器,不同的 MCU,其桥梁应该是不同的,打开 portabe 文件夹,如下图所示:
德阳瑞能电力科技有限公司(李清林)
4
Keil 文件夹里面的东西肯定也是必须的,但是我们打开 Keil 文件夹以后里面只有一个
文件:See_also_the_RVDS_directory.txt。这个 txt 文件是什么呀?别急嘛!看文件名字
“See_also_the_RVDS_directory”,意思就是参考 RVDS 文件夹里面的东西!好吧,再打开
RVDS 文件夹,如下图所示:
RVDS 文件夹针对不同架构的 MCU 做了详细的分类,STM32F103 就参考了 ARM-CM3,
打开 ARM-CM3 文件夹,如下图所示:
ARM-CM3 文件夹下有 2 个文件,这 2 个文件就是我们移植的时候需要的。
德阳瑞能电力科技有限公司(李清林)
5
MemMang 文件夹跟内存管理相关,移植时是必须使用的,打开 MemMang 文件夹,如
下图所示:
(1)、heap_1.c 使用大数组,可申请,没释放,系统使用创建消息量、定时器等也基
本不需要释放;
(2)、heap_2.c 使用大数组,可申请,可释放,但是不会合并相邻空闲块,会产生碎片;
(3)、heap_3.c 使用 malloc 和 free 封装;
(4)、heap_4.c 使用大数组,可申请,可释放,相邻区块可以合并;
(5)、heap_5.c 允许使用多个内存堆块,可内部 RAM 可外部 RAM,每个内存堆的起
始地址和大小需用户定义;
heap_4.c 个文件就是我们移植的时候需要的。
德阳瑞能电力科技有限公司(李清林)
6
三、准备工作
1、创建一个基础的工程项目 project
用 Keil5 在【D:\V4-006_基础例程】下创建一个基础的工程项目,基础工程越简单越好,
基础工程的项目名称为 project。
德阳瑞能电力科技有限公司(李清林)
7
2、编译基础工程项目 project
编译 project 工程项目,可以观察到没有任何错误,接下来我们就可以在这个基础工程
项目上移植 FreeRTOS。
德阳瑞能电力科技有限公司(李清林)
8