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

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

3天内不再提示

FreeRTOS heap_5内存分配方法介绍

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

heap_5 内存分配方法

heap_5 使用了和 heap_4 相同的合并算法,内存管理实现起来基本相同,但是heap_5 允许内存堆跨越多个不连续的内存段。比如 STM32 的内部 RAM 可以作为内存堆,但是 STM32 内部 RAM 比较小,遇到那些需要大容量 RAM 的应用就不行了,如音视频处理。不过STM32 可以外接 SRAM 甚至大容量的 SDRAM,如果使用 heap_4 的话你就只能在内部 RAM 和外部SRAM 或 SDRAM 之间二选一了,使用 heap_5 的话就不存在这个问题,两个都可以一起作为内存堆来用。

如果使用 heap_5 的话,在调用 API 函数之前需要先调用函数 vPortDefineHeapRegions ()来对内存堆做初始化处理,在 vPortDefineHeapRegions()未执行完之前禁止调用任何可能会调用pvPortMalloc()的 API 函数!比如创建任务、信号量、队列等函数。函数 vPortDefineHeapRegions()只有一个参数,参数是一个 HeapRegion_t 类型的数组,HeapRegion 为一个结构体,此结构体在portable.h 中有定义,定义如下:

typedefstructHeapRegion

{

uint8_t*pucStartAddress;//内存块的起始地址

size_txSizeInBytes;//内存段大小

}HeapRegion_t;

使用 heap_5 的时候在一开始就应该先调用函数 vPortDefineHeapRegions()完成内存堆的初始化!然后才能创建任务、信号量这些东西。

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

    关注

    5082

    文章

    19117

    浏览量

    304982
  • 内存
    +关注

    关注

    8

    文章

    3023

    浏览量

    74029
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62588
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62157
收藏 人收藏

    评论

    相关推荐

    FreeRTOS内存机制详解

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

    第28章 FreeRTOS动态内存管理

    28.4 实验例程说明28.5总结28.1动态内存管理介绍 FreeRTOS支持5种动态内存管理方案,分别通过文件
    发表于 09-11 07:15

    基于FreeRTOS内存管理Heap_4.c的实现方法

    一下,哈哈。 既然是在FreeRTOS内存管理Heap_4.c的基础上稍稍修改的,那还是先介绍一下它的实现方法吧:以下为转载内容,原文链接:
    发表于 07-15 21:46

    为什么既然已经用上了FreeRTOS,还要再用自己的内存分配方案呢

    在阅读某FreeRTOS音乐播放器例程时,发现程序中使用了rt_alloc_mem函数来分配内存,有点不懂为什么既然已经用上了FreeRTOS,还要再用自己的
    发表于 07-18 08:00

    STM32内存结构介绍FreeRTOS内存分配技巧

    STM32内存结构介绍FreeRTOS内存分配技巧这是我第一次使用FreeRTOS构建STM3
    发表于 02-14 07:38

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

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

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

    FreeRTOS8.0.1这个版本中,一共有四个内存堆模型。这一次讲的就是第二个模型Heap_2.c。从一开始就可以看到注释中对Heap_2的模型解释:这是对pvPortMalloc
    发表于 02-09 05:28 832次阅读
    <b class='flag-5'>FreeRTOS</b>代码剖析之2:<b class='flag-5'>内存</b>管理<b class='flag-5'>Heap</b>

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

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

    韦东山freeRTOS系列教程之内存管理(2)

    文章目录 教程目录 2.1 为什么要自己实现内存管理 2.2 FreeRTOS5内存管理方法 2.2.1
    发表于 11-29 16:58 1033次阅读
    韦东山<b class='flag-5'>freeRTOS</b>系列教程之<b class='flag-5'>内存</b>管理(2)

    STM32内存结构介绍FreeRTOS内存分配技巧,Stack_Size和Heap_Size大小设置

    STM32内存结构介绍FreeRTOS内存分配技巧这是我第一次使用FreeRTOS构建STM3
    发表于 12-09 13:51 18次下载
    STM32<b class='flag-5'>内存</b>结构<b class='flag-5'>介绍</b>,<b class='flag-5'>FreeRTOS</b><b class='flag-5'>内存</b><b class='flag-5'>分配</b>技巧,Stack_Size和<b class='flag-5'>Heap</b>_Size大小设置

    heap_1内存分配方法

    heap_1 内存分配方法 动 态 内 存 分 配 需 要 一 个 内 存 堆 , FreeRTOS 中 的 内 存 堆 为 ucHeap[] , 大 小 为
    的头像 发表于 07-30 10:33 621次阅读

    heap_2内存的特性与分配方法

    heap_2 内存分配方法 heap_2 提供了一个更好的分配算法,不像 heap_1那样,
    的头像 发表于 07-30 10:36 647次阅读

    FreeRTOS heap_3内存分配方法

    heap_3 内存分配方法 这个分配方法是对标准 C 中的函数 malloc()和 free()的简单封装,FreeRTOS 对这两个函数做
    的头像 发表于 07-30 10:40 742次阅读
    <b class='flag-5'>FreeRTOS</b> <b class='flag-5'>heap</b>_3<b class='flag-5'>内存</b><b class='flag-5'>分配方法</b>

    heap_4内存分配方法介绍

    heap_4 内存分配方法 heap_4 提供了一个最优的匹配算法,不像 heap_2,heap
    的头像 发表于 07-30 10:42 931次阅读

    如何自定义内存控制器的设置

    FreeRTOS中自定义内存控制器的设置,主要涉及到内存分配策略的选择和配置。FreeRTOS提供了多种
    的头像 发表于 09-02 14:28 471次阅读