FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)

目录

1.下载源码

2.创建FRERTOS工程

新建keil工程(选择文件夹PROJECT):

3.准备工作做好了:接下来正式开始移植

b.裁剪不用的删除

c.设置头文件路径(点击上边小锤子 然后c/c++ 底下有include payh):

d.添加主函数

e.尝试第一次编译

d:一定要主要这个错误很难找

e:因为宏定义一开始没有开启,需要我们去修改开启

f:修改没有定义的钩子函数的宏定义1改成0

同样的FreeRTOS在stm32F407还会出现一个错误:


1.下载源码

FreeRTOS官网:https://freertos.org/

下载FreeRTOS最新版:(直接下载relese版就可以了)

https://freertos.org/a0013.04.html

2.创建FRERTOS工程

新建工程文件夹:

建立3个文件夹

FreeRTOS:存放内核

PROJECT:工程文件

USER:main.c文件

新建keil工程(选择文件夹PROJECT):

选择内核和启动文件(普通创建keil工程一样)

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第1张图片

点击上边的新建文件,就是三个红绿白正方形的图案

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第2张图片

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第3张图片

3.准备工作做好了:接下来正式开始移植

a:简单介绍下载的FreeRTOS

首先看到的解压完成的FreeRTOS

FreeRTOS就是存放FreeRTOS移植的

FreeRTOS-Plus是扩展功能的文件夹

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第4张图片

b.裁剪不用的删除

将Source下的所有文件拷贝到刚才新建的FreeRTOS文件夹中

E:\EnglishPath\FreeRTOS2021\FreeRTOSv202107.00\FreeRTOS\Source

然后将portable下的文件裁剪只剩下:

keil:keil所需要的文件

MemMang:内存管理

RVDS:选择这个ARM_CM4F文件夹下的,因为我们是M4芯片

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第5张图片

添加以下文件(具体如何添加文件,没那么小白吧):

E:\EnglishPath\FreeRTOS_test\FreeRTOS\portable\RVDS\ARM_CM4F

E:\EnglishPath\FreeRTOS_test\FreeRTOS\portable\MemMang

E:\EnglishPath\FreeRTOS_test\FreeRTOS

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第6张图片

c.设置头文件路径(点击上边小锤子 然后c/c++ 底下有include payh):

......\FreeRTOS_test\FreeRTOS\include

.......\FreeRTOS\portable\RVDS\ARM_CM4F

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第7张图片

d.添加主函数

然后在USER添加主main.c(因为必须有主函数才能运行):

int main()

{

        return 0;

}

e.尝试第一次编译

点击运行编译:然后都是 缺少FreeRTOSConfig.h  这个文件是去下载的内核文件demo区找

注意:不同的芯片找不同的FreeRTOSConfig.h 

E:\EnglishPath\FreeRTOS2021\FreeRTOSv202107.00\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第8张图片

然后将该文件添加到自己include中,然后继续编译

d:一定要主要这个错误很难找

注意警惕::::突然报了83个错误

../FreeRTOS/portable/RVDS/ARM_CM4F\portmacro.h(173): error: expected 'volatile', 'inline', 'goto', or '('

../FreeRTOS/portable/RVDS/ARM_CM4F\portmacro.h(203): error: expected 'volatile', 'inline', 'goto', or '('

../FreeRTOS/portable/RVDS/ARM_CM4F\portmacro.h(93): note: expanded from macro 'portYIELD'

这是因为编译版本代,不知道为什么这个版本6编译器都不支持,改成5之后就只有四个错误了

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第9张图片

e:因为宏定义一开始没有开启,需要我们去修改开启

首先看到的是:

..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c(734): error:  #20: identifier "SystemCoreClock" is undefined

这是因为FreeRTOSConfig.h里边这个预处理不对,

将#ifdef __ICCARM__ 替换成#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)

#ifdef __ICCARM__

        #include

        extern uint32_t SystemCoreClock;

#endif

f:修改没有定义的钩子函数的宏定义1改成0

剩下的错误:都是HOOK结尾的钩子函数因为声明了,没有进行实现,

将FreeRTOSConfig.h,下的宏定义改成0,0代表不使用

.\Objects\FREERTOS.axf: Error: L6218E: Undefined symbol vApplicationIdleHook (referred from tasks.o).

.\Objects\FREERTOS.axf: Error: L6218E: Undefined symbol vApplicationStackOverflowHook (referred from tasks.o).

.\Objects\FREERTOS.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).

全都改成0

#define configUSE_IDLE_HOOK                                1

#define configUSE_TICK_HOOK                                1

#define configCHECK_FOR_STACK_OVERFLOW      1

同样的FreeRTOS在stm32F407还会出现一个错误:

.\Objects\TEST.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by port.o and stm32f4xx_it.o).

.\Objects\TEST.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by port.o and stm32f4xx_it.o).

.\Objects\TEST.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by port.o and stm32f4xx_it.o).

因为中断和FreeeRTOS重复定义了,这里我们将这三个函数在stm32f4xx_it.c中屏蔽掉

都注释掉就好了

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第10张图片

FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)_第11张图片

这个时候也就是完成的时候了,没有错误了。有什么错误希望订正我改正

你可能感兴趣的:(FreeRTOS实时操作系统,stm32,单片机,stm32,嵌入式硬件)