使用的资源:FreeRTOSv10.2.1、STM32F407ZET6、Keil v5.14.0

一、下载FreeRTOS

方法一:FreeRTOS官网下载

下载 FreeRTOS - FreeRTOS™

在官网界面选择最新版本下载或者查看之前的版本进行下载。

进入之前版本下载后,会到一个GitHub网站,选择Tags查看所需的版本。

选择完成后,找到相应的版本进行下载。

方法二:代码托管网站下载

FreeRTOS Real Time Kernel (RTOS) - Browse /FreeRTOS at SourceForge.net

进入这个网站也可以选择相应的版本进行下载。

二、移植文件到自己的工程中

1)自己工程文件的移植操作

1、自己的工程文件中新建一个FreeRTOS文件夹。

2、在下载的FreeRTOS资源包中将Source下的include的文件夹复制到自己的工程文件中。

3、接着将Source下的所有.c文件复制到自己的工程文件src中。

4、进入到Source下的portable中的RVDS文件夹中。

5、在此文件夹中选择自己的单片机型号对应的文件。

6、进入到相应的文件夹,将里面的.c和.h文件复制到自己工程的port文件中。

7、返回到portable文件夹下,选择MemMang文件夹里的heap_4.c文件,将heap_4.c文件放入自己工程的port文件夹中。

8、在自己的FreeRTOS资源包中选择Demo文件夹,进入到里面选择单片机型号对于的文件。

9、选择对应版本的文件后,进入里面选择FreeRTOSConfig.h文件,复制到自己工程文件中,不放入到include、src、port文件夹中。

10、移植完后自己的工程文件如下图所示

2)Keil5软件上的移植操作

1、点击三色品图形,在这里创建两个文件。

FreeRTOS/src:添加相应的 .c 文件

FreeRTOS/port:添加相应的 .c 和 .h 文件

2、点击魔法棒,添加头文件的包含

FreeRTOS/include、FreeRTOS/port、FreeRTOS

3、错误解决

编译后会出现如下的错误:SystemCoreClock未定义。

解决方法:按照如下地方进行修改,更改为

#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)

再次编译,又会出现如下的错误:函数的多重定义。

解决方法:将如下的函数注释掉

SVC_Handler()、PendSV_Handler()、SysTick_Handler()

同时也要注意自己的工程项目里有没有包含了systick系统定时器中断函数,如果有也要注释掉这个函数。

之后再次编译,新增如下的错误:

未定义的函数,它们都是Hook 结尾的,这些函数有个共同的名称:钩子函数。

解决方法:将FreeRTOSConfig.h文件中如下的宏定义修改为0

4、额外补充:使用stm32f103的问题解决

问题:未定义xTaskGetCurrentTaskHandle函数

解决:在FreeRTOSConfig.h添加如下的宏定义

#define INCLUDE_xTaskGetCurrentTaskHandle  1 

问题:未定义xTaskGetSchedulerState函数

解决:在FreeRTOSConfig.h添加如下的宏定义

#define INCLUDE_xTaskGetSchedulerState  1 

附加分享:如何修改快捷键,这里我更改了添加注释和删除注释的快捷键。

三、移植结束

至此,FreeRTOS的移植到此结束,接下来就可以进行RTOS的开发了!!!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐