0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS的源码下载

汽车电子技术 来源:嵌入式之入坑笔记 作者:嵌入式之入坑笔记 2023-02-10 11:00 次阅读

1、FreeRTOS的学习

1.1、FreeRTOS的源码下载

学习一个操作系统前,首先要下载对应的源码,用于研究和学习。FreeRTOS的源码下载链接如下:

https://sourceforge.net/projects/freertos/files/FreeRTOS/

页面图示如下:

图片

下载之后的文件为:FreeRTOSv202012.00-LTS.exe.qbl

1.2、FreeRTOS在线API指南

FreeRTOS提供了在线的API接口的指南,这对于开发和学习都是非常的友好的,在线API指南的网址为:

http://web.ist.utl.pt/~ist11993/FRTOS-API/index.html

在线指南的示意图如下:

图片

1.3、在线应用指南

除了在线的API应用指南之外,还有一个在线的开发指导手册,是非常好用的一份手册:

https://www.freertos.org/RTOS.html

图示如下:

图片

2、FreeRTOS移植到MCU

0.基于STM32F103的移植,其它系列MCU类似。

硬件平台: STM32F103ZET6

软件平台:MDK529

FreeTROS版本:FreeRTOS Kernel V10.4.3

1.在工程目录下新建FreeRTOS文件夹,该文件夹用于存放FreeRTOS相关的文件。

图片

2.在FreeRTOSv10.2.1FreeRTOSSource路径下找到FreeRTOS的源码,将其拷贝到工程中的FreeRTOS文件夹中。

图片

其中头文件和源码源文件是全部要用到的,不做任何删除。

portable文件夹是和硬件平台,软件开发环境相关的文件。FreeRTOS为了让用户移植简单,帮用户做了很多工作。打开portable文件夹如下:

图片

3.打开工程,在工程中添加一个专用来存放FreeRTOS的Group

图片

将FreeRTOS的源文件,内存管理文件,硬件接口文件统统添加到这个FreeRTOS这个Group中

图片

内存管理文件在FreeRTOSportableMemMang文件夹下,FreeRTOS提供了五种内存管理方案,对于移植来说,随便选一种方案都是可以的。但是heap_4有内存碎片管理的功能,对内存碎片可以自动监控和收集,所以选择这个内存管理会更好。

port.c文件在FreeRTOSportableRVDS路径下找到与自己使用的MCU内核的文件夹:

图片

4.添加头文件路径,需要添加两个路径。

图片

5.编译

图片

便已完成之后,提示打不开FreeRTOSConfig.h这个文件。这是因为FreeRTOS源码中并没有提供这个文件。

这种情况下有两种办法:

第一、自己动手写一个(哈哈,个人觉得这个对一般人来说不现实);

第二、找一个可以直接用的。

仔细找找会发现,其实官方在很多平台下都移植了FreeRTOS。去官方的demo中找,FreeRTOSv10.2.1FreeRTOSDemo路径下存放的全是官方移植的demo。在此路径下找到CORTEX_STM32F103_Keil文件夹,此文件夹是官方基于STM32F103和MDK平台移植的demo。(其他平台参考该方式类似的查找)

在此文件夹下找到FreeRTOSConfig.h文件。

图片

将其拷贝到源码的头文件中。重新进行编译。

图片

这种情况下,只要使能一个有关的宏定义为1即可以,在FreeRTOSConfig.h文件中将宏INCLUDE_xTaskGetCurrentTaskHandle定义为1,使能该函数,重新编译一下,应该就不会报错了。

6.添加三个宏定义

首先我们需要对FreeRTOS的几个很重要的问题要有一个认识:

<1> FreeRTOS触发第一个任务是在SVC_Handler中断中进行的;
<2> 切换任务是在PendSV_Handler中断中进行的;
<3> 系统节拍中断是在SysTick_Handler中进行的。

在我们自己移植的项目中,官方的文件中对3个函数的定义是没有的,需要我们自己进行一些修改。

在官方的提供的文件中,实现了另外3个相关的函数,名字分别是:

vPortSVCHandler
xPortPendSVHandler
xPortSysTickHandler。

所以,我们只需要根据自己所用的MCU环境进行相应的替换即可以对应上了。在FreeRTOSConfig.h头文件中做一下宏定义就可以了。注意要将自己的原来3个空函数注释掉。

这三个宏定义非常重要!!!

#define xPortPendSVHandler       PendSV_Handler
#define vPortSVCHandler           SVC_Handler
#define xPortSysTickHandler        SysTick_Handler

其中,xPortSysTickHandler是系统滴答定时器中断,用于给FreeRTOS提供运行的心跳节拍的,代码示意如下:

void xPortSysTickHandler( void )
{
    /* The SysTick runs at the lowest interrupt priority, so when this interrupt
     * executes all interrupts must be unmasked.  There is therefore no need to
     * save and then restore the interrupt mask value as its value is already
     * known - therefore the slightly faster vPortRaiseBASEPRI() function is used
     * in place of portSET_INTERRUPT_MASK_FROM_ISR(). */
    vPortRaiseBASEPRI();
    {
        /* Increment the RTOS tick. */
        if( xTaskIncrementTick() != pdFALSE )
        {
            /* A context switch is required.  Context switching is performed in
             * the PendSV interrupt.  Pend the PendSV interrupt. */
            portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
        }
    }


    vPortClearBASEPRIFromISR();
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移植
    +关注

    关注

    1

    文章

    367

    浏览量

    27854
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347
  • 内存管理
    +关注

    关注

    0

    文章

    162

    浏览量

    14056
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 2.1-FreeRTOS移植--FreeRTOS源码下载

    操作系统移植RTOSFreeRTOS
    Mr_haohao
    发布于 :2022年08月23日 10:59:27

    freertos源码的过程?

    看了freertos很久了。看是源码看的迷迷糊糊原来打算各个击破 。list.C算是看懂了。目前就不知道咋办了?请高手讲下自己看懂freertos的经历。 (另外,我以前没有看懂过ucos代码)
    发表于 06-18 09:00

    如何移植FreeRTOS源码

    开发板后赠与的光盘内找到,路径:A盘->软件资料->FreeRTOS学习资料->FreeRTOS源码,之后点击程序下载移植步骤:1.复制粘贴于基础工程中新建一个文件夹,可命名为
    发表于 08-03 06:12

    如何添加FreeRTOS源码

    目录1、源码准备2、创建FreeRTOS文件夹3、在工程中添加FreeRTOS源码4、添加对应的头文件路径5、编译及错误解决5.1 找不到FreeRTOSConfig.h文件5.2
    发表于 08-04 07:01

    下载并整理FreeRTOS源码

    一、下载并整理FreeRTOS源码下载压缩包解压打开解压后的文件夹打开FreeRTOS–Source–portable文件夹再打开RVDS文
    发表于 08-24 07:49

    如何移植FreeRTOS最简源码

    如何移植FreeRTOS最简源码
    发表于 11-29 08:00

    freertos官方源码

    源码包有2个,一个是FreeRTOS 202111.00,一个是FreeRTOS LTS 202012.03。两个源码包各有区别:FreeRTOS
    发表于 12-06 16:53

    FreeRTOS源码介绍

    0. 引言之前freeRTOS用过几次,但是项目赶工的急,一直没有认真的去里面看过,最近正好有空,准备到里面看下源码实现,毕竟核心文件就这么几个,认真看一下流程,对操作系统的雏形也就有一个认识了
    发表于 02-14 07:42

    FreeRTOS的移植与FreeRTOS源码文件作用介绍

    文章目录一、实时操作系统二、FreeRTOS三、移植FreeRTOS的准备工作(一)、FreeRTOS源码文件作用介绍1、include文件夹(1)、include/croutine.
    发表于 02-18 06:13

    FreeRTOS操作系统源码V3.2

    FreeRTOS操作系统源码V3.2
    发表于 03-26 15:24 94次下载

    FreeRTOS_002_ 源码文件描述与提取建立工程

    FreeRTOS_002_源码文件描述与提取建立工程
    的头像 发表于 03-14 11:47 2184次阅读
    <b class='flag-5'>FreeRTOS</b>_002_ <b class='flag-5'>源码</b>文件描述与提取建立工程

    freertos移植教程_freertos任务调度原理

    在移植之前,我们首先要获取到FreeRTOS的官方的源码包。
    发表于 04-16 09:16 1.2w次阅读
    <b class='flag-5'>freertos</b>移植教程_<b class='flag-5'>freertos</b>任务调度原理

    初入FreeRTOS

    源码3、FreeRTOS移植操作三、在STM32下完成一个基于FreeRTOS的多任务程序1、任务要求2、任务实施3、任务结果四、总结一、FreeRTOS介绍1、初识
    发表于 12-06 21:06 37次下载
    初入<b class='flag-5'>FreeRTOS</b>

    FreeRTOS系列第8篇---FreeRTOS内存管理

    本文介绍内存管理的基础知识,详细源码分析见《 FreeRTOS高级篇7---FreeRTOS内存管理分析》
    发表于 01-26 17:56 17次下载
    <b class='flag-5'>FreeRTOS</b>系列第8篇---<b class='flag-5'>FreeRTOS</b>内存管理

    freeRTOS源码中内存管理的方案

    freeRTOS源码中提供了五种内存管理的方案,可以说是很方便了。实际需要使用哪一种,可以根据自己项目的需要进行选择,都是可以的。
    的头像 发表于 02-10 11:11 456次阅读