FreeRTOS的移植
使用的资源:FreeRTOSv10.2.1、STM32F407ZET6、Keil v5.14.0
一、下载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的开发了!!!

更多推荐

所有评论(0)