一、前言
从简单的一些任务状态机再到复杂一些的RTOS,再到最复杂的Linux,这些都属于嵌入式操作系统的一种,只是简单与复杂的区别。在之前,我们开发STM32时采用的都是裸机开发所以对实时系统并没有什么概念,接触RTOS会接触到一种新的编程方式。当然,因为RTOS已经引入了系统的概念了,所以代码看起来与调试起来也更加抽象。但,就现在而言,实时操作系统仍然是许多公司要求嵌入式工程师必会的技能之一。所以,如果你准备好了,让我们一起来移植RTOS。
二、下载固件包
1.搜索FreeRTOS
2.切换中文,点击下载按钮
3.选择2022版本,点击Download
推荐选择2022版本,这个版本稳定一些
之后直接点击Download
固件包百度网盘
固件库迅雷资源
4.下载完成,完成后的文件夹
解压后的文件夹
三、移植Free RTOS文件
1.创建RTOS文件夹,并创建Inc、Src和Port
这里的Inc文件夹用来存放RTOS的头文件和配置文件,Src用来存放RTOS的源文件,Port用来存放RTOS的内存管理文件。
2.移植Src文件的7个.c程序
这里我们首先将“Source”文件夹下的7个.c的文件复制到工程目录中创建的“RTOS\Src”文件夹下:
3.移植固件包的Include文件
把“Source”文件夹的“include”文件夹下的所有.h的文件复制到“RTOS\Inc”文件夹下
4.移植heap_4.h
“portable”文件夹下的“MemMang”文件夹,将“heap_4.c”文件复制到工程目录下的“RTOS\Port\MemMang下”:
5.移植M3
经过查询F103Zet6的内核时M3
6.移植Free RTOSConfig.h
在对应板子的模板程序中移植Free RTOSConfig.h系统配置文件
ps:FreeRTOSConfig.h 是一个用户级别的配置文件,不属于内核文件。每个用户可以有不同的FreeRTOSConfig.h,从而实现不同的功能配置。
四、配置RTOS文件
1.添加RTOS文件夹
2.添加.h路径
3.添加文件
五.程序修改
1.Free RTOSConfig.h文件添加三个宏
/* 添加必须的三个宏*/
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define INCLUDE_xTaskGetSchedulerState 1
2.在stm32f10xx_it.c文件中注释掉重复定义的“PendSV_Handler”,“SVC_Handler”,
ps:编译会报两个错误
注释掉
3.配置stm32f10xx_it.c文件中SysTIck_Handler
首先添加头文件和外部函数
#include "FreeRTOS.h"
#include "task.h"
extern void xPortSysTickHandler( void );
接着配置Systick函数
void SysTick_Handler(void)
{
if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
{
xPortSysTickHandler();
}
}
六、创建demo程序
FreertosConfig配置可以看这个人的,挺详细的
首先要选择Use MicroLIB不然调试会卡在main函数前
2.如果时C8T6移植的话要改一下尺寸