在一些不严谨的地方也可以称作 "FreeRTOS移植",与下一章节的FreeRTOS移植不同的地方在于 "工程创建" 指的是使用FreeRTOS支持的CPU完成工程创建,而移植则包含FreeRTOS暂未支持的CPU的底层实现。
而在
这里以STM32F103系列单片机为例。
在官网freertos.org中提供了普通版本和LTS版本的源码,
其区别主要有:
主要步骤如下:
FreeRTOS/Source/*.c
复制到 freertos/src
下。FreeRTOS/Source/include/*.h
复制到 freertos/inc
下。FreeRTOS/Source/portable/MemMang
下选择一种内存管理方式,通常选择 heap_4.c
并复制到 freertos/src
下。FreeRTOS/Source/include/portable
下进入对应编译器所在目录,并在该目录中找到对应CPU结构体系所在的文件夹,复制 port.c
到 freertos/src
,复制 portmacro.h
到 freertos/inc
。FreeRTOS/Demo
,根据平台和编译器选择文件夹,复制 FreeRTOSConfig.h
到 freertos/inc
。简单来说,文件提取需要提取:
port.c
和 portmacro.h
FreeRTOSConfig.h
FreeRTOS需要将如下的三个中断服务直接映射到对应的接口上:
PendSV_Handler
SVC_Handler
SysTick_Handler
FreeRTOSConfig.h
中定义如下的宏,重命名中断handler名,并删除原中断函数实现(若使用CubeMx则需要取消生成对应的中断函数)#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
xPortPendSVHandler
等handler。启动FreeRTOS只需要使用 vTaskStartScheduler();
启动调度器即可,随后在主函数中加入死循环并捕获FreeRTOS的退出。