笔者最近在学习FreeRTOS实时操作系统,准备开一个专题,记录学习内核的一些心得。学习RTOS的第一步就是将操作系统移植适配到我们的硬件平台,FreeRTOS作为一款完全开源且免费的实时操作系统,非常适合新手学习。笔者使用的是STM32F103Z8T6核心板,移植的FreeRTOS的版本为V10.5.1。
先运行起来一个STM32的裸机demo工程。
FreeRTOS源码下载 url:https://github.com/FreeRTOS/FreeRTOS-Kernel.git
FreeRTOS根目录结构:
为了推广FreeRTOS,源码维护者会给市面上主流的芯片厂商评估板适配自己的RTOS,这些经过验证的项目会统一存在这个文件夹内。
官方的readme中也提示使用FreeRTOS的最简单的方式就是使用预先配置好的demo工程,这样就可以正确配置文件的路径和所需的配置。
这是FreeRTOS版权的一些声明,不做过多赘述。
这是FreeRTOS的源码,是实现操作系统的核心代码,我们主要移植的也就是这些文件。
这是与测试相关的代码,不做过多赘述。
这里重点说下Source文件夹下的内容:
include:这是FreeRTOS内核的核心宏定义和提供给我们的api声明。
portable:这是与硬件相关的信息。
.c源文件:这就是核心实现的代码。
移植前需要对源码进行一些裁减,portable文件夹下的内容:
这些都是不同平台、编译器的相关内容,我们的开发环境是Keil编译器是RVDS,整个文件夹我们需要保留的是Keil、MemMang(内存管理)、RVDS三个文件夹,其余全部删掉即可。
开始移植
首先在裸机工程下创建两个文件夹分别是:freertos_core、freertos_port
将source文件夹下的*.c全部复制到freertos_core文件夹下。
再将RVDS文件夹下的ARM_CM3(因为STM32F1系列的内核是M3)
下的port.c
MemMang文件夹下的heap4.c复制到freertos_port文件夹下
在keil环境中,将头文件的路径引入,分别是
FreeRTOS/Source/portable/RVDS/ARM_CM3
FreeRTOS/Source/include
最后将Demo文件中的
FreeRTOS/Demo/CORTEX_STM32F103_Keil下的FreeRTOSConfig.h复制到裸机工程的user目录下。
这些工作完成之后,需要进行一些设置:
打开FreeRTOSConfig.h
添加如下定义:
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
#define INCLUDE_xTaskGetSchedulerState 1
在stm32f10x_it.中注释掉3个函数
PendSV_Handler
SVC_Handler
SysTick_Handler
至此,FreeRTOS配置完毕。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。