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工程一样)

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

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

a:简单介绍下载的FreeRTOS

首先看到的解压完成的FreeRTOS

FreeRTOS就是存放FreeRTOS移植的

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

b.裁剪不用的删除

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

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

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

keil:keil所需要的文件

MemMang:内存管理

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

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

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

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

E:\EnglishPath\FreeRTOS_test\FreeRTOS

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

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

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

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

然后将该文件添加到自己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之后就只有四个错误了

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 <stdint.h>

        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中屏蔽掉

都注释掉就好了

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

  • 15
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值