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

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

3天内不再提示

FreeRTOS内存管理简介

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-30 10:26 次阅读

FreeRTOS 创建任务、队列、信号量等的时候有两种方法,一种是动态的申请所需的 RAM。一种是由用户自行定义所需的 RAM,这种方法也叫静态方法,使用静态方法的函数一般以“Static”结尾,比如任务创建函数 xTaskCreateStatic(),使用此函数创建任务的时候需要由用户定义任务堆栈,我们不讨论这种静态方法。

使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。标准 C 库中的 malloc()和 free()也可以实现动态内存管理,但是如下原因限制了其使用:

● 在小型的嵌入式系统中效率不高。

● 会占用很多的代码空间。

● 它们不是线程安全的。

● 具有不确定性,每次执行的时间不同。

● 会导致内存碎片。

● 使链接器的配置变得复杂。

不同的嵌入式系统对于内存分配和时间要求不同,因此一个内存分配算法可以作为系统的可选选项。FreeRTOS 将内存分配作为移植层的一部分,这样 FreeRTOS 使用者就可以使用自己的合适的内存分配方法。

当内核需要 RAM 的时候可以使用 pvPortMalloc()来替代 malloc()申请内存,不使用内存的时候可以使用 vPortFree()函数来替代 free()函数释放内存。函数 pvPortMalloc()、vPortFree()与函数 malloc()、free()的函数原型类似。

FreeRTOS 提供了 5 种内存分配方法,FreeRTOS 使用者可以其中的某一个方法,或者自己的内存分配方法。这 5 种方法是 5 个文件,分别为:heap_1.c、heap_2.c、heap_3.c、heap_4.c 和heap_5.c。这 5 个文件再 FreeRTOS 源码中,路径:FreeRTOS-》Source-》portable-》MemMang。

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

    关注

    5056

    文章

    18950

    浏览量

    301484
  • 内存
    +关注

    关注

    8

    文章

    2957

    浏览量

    73782
  • FreeRTOS
    +关注

    关注

    12

    文章

    483

    浏览量

    61892
收藏 人收藏

    评论

    相关推荐

    FreeRTOS内存机制详解

    FreeRTOS是一种实时操作系统,它提供了多种内存分配方式,包括动态内存分配和静态内存分配。
    的头像 发表于 12-31 16:49 2413次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b>机制详解

    第28章 FreeRTOS动态内存管理

    转: 本章节为大家讲解FreeRTOS动态内存管理,动态内存管理FreeRTOS非常重要的一项
    发表于 09-11 07:15

    FreeRTOS内存管理的算法解析?

    关于FreeRTOS内存管理,有人测试过它给定的算法么?会不会有内存碎片的出现,如果产品一直运行,会不会出现内存崩溃的情况。求证啊。目前用h
    发表于 07-30 11:39

    内存管理简介

    内存管理1.内存管理简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 12-13 06:17

    嵌入式系统的内存管理简介

    一、内存管理简介
    发表于 12-21 08:12

    Freertos关于堆内存管理的相关资料分享

    内存管理Malloc、Free防止内存碎片Freertos
    发表于 12-27 08:12

    FreeRTOS代码剖析之4:内存管理Heap

    FreeRTOS8.0.1内存管理的最后一个堆模型Heap_4,貌似是在这一个版本才有的。所以找到的说明几乎没有。代码的开头注释也只是简单地说了一下实现了pvPortMalloc
    发表于 02-09 02:52 336次阅读

    FreeRTOS代码剖析之1:内存管理Heap

    内存管理是一个操作系统的重要组成部分之一,所有应用程序都离不开操作系统的内存管理。因此,在剖析FreeRTOS的内核代码之前,前对
    发表于 02-09 05:25 897次阅读
    <b class='flag-5'>FreeRTOS</b>代码剖析之1:<b class='flag-5'>内存</b><b class='flag-5'>管理</b>Heap

    FreeRTOS代码剖析之3:内存管理Heap

    FreeRTOS8.0.1的第三个模型Heap_3,可以说是最容易理解的一个内存管理模型。因为在这个模型里,FreeRTOS直接将标准C库中的malloc()和free()进行加工打
    发表于 02-09 05:30 398次阅读

    嵌入式操作系统FreeRTOS内存如何管理和堆

    嵌入式操作系统FreeRTOS内存管理和堆
    的头像 发表于 01-10 15:17 4605次阅读
    嵌入式操作系统<b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b>如何<b class='flag-5'>管理</b>和堆

    关于FreeRTOS内存分配多少才合适

    FreeRTOS内存分配多少才合适
    的头像 发表于 03-06 15:04 1.9w次阅读

    FreeRTOS高级篇7---FreeRTOS内存管理分析

    FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些
    发表于 01-26 17:36 7次下载
    <b class='flag-5'>FreeRTOS</b>高级篇7---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b><b class='flag-5'>管理</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><b class='flag-5'>内存</b><b class='flag-5'>管理</b>

    freeRTOS源码中内存管理的方案

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

    FreeRTOS内存管理实现

    FreeRTOS是一个为嵌入式系统设计的开源实时操作系统。它提供了一个多任务内核和一系列功能,适合在资源受限的设备上管理实时任务和应用程序。FreeRTOS内存
    的头像 发表于 10-10 16:17 834次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>实现