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

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

3天内不再提示

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

黄工的嵌入式技术圈 ? 来源:网站整理 ? 2020-03-06 15:04 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一位朋友问:黄哥,我刚学FreeRTOS不久,我想问一下,创建一个任务,堆栈分配多少才合适呢?

1写在前面

这个关于FreeRTOS操作系统内存分配的问题,其实只要大概明白内存管理,以及资源分配的一些知识,相信就不会存在这种疑惑。

操作系统内存分配如果深入分析的话,知识蛮多的,本文只针对开篇的问题展开一些相关知识的讲解。

2

操作系统内存管理

FreeRTOS提供多种内存管理方式,在MemMang文件夹下有5个文件:heap_1到heap_5。

heap,其实是堆的意思,换句话说FrreRTOS系统的内存就是通过分配堆来实现的。(内存管理的知识较多,大家有空可以网上多了解一下,这里不讲述)

而目前FreeRTOS常用的就是heap_4这种内存管理方式:通过事先为系统资源分配一个堆(数组),如下图:

1.可配置在外部,或在heap_4中分配堆;

2.通过FreeRTOSConfig.h配置堆的大小,注意大小单位为字节。

提示:heap_1至heap_5其他管理方式其实还是有很大差别,这里不讲述(后面抽时间再讲述),具体可以参看:

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

3

系统资源内存分配

FreeRTOS中系统为各资源分配内存,使用heap_4内存管理方式就是在创建之初就分配一段内存。

而分配的这个资源就是从整个系统堆ucHeap划分了一块出来。我们创建一个任务,分配堆栈大小的原理,进一步查看代码:

提示:这个创建任务大小为我们填写数值x4字节。比如,填写128,其实分配的空间为512Byte.(很多人以为单位是字节,发现多创建几个任务,内存就分配失败了)

再比如,创建队列:

参数1:队列长度,也就是队列的数量;

参数2:队列大小,也就是一个队列有多少字节;

队列分配的内存大小就是:参数1x参数2 (单位Byte)。

这里就举上面两个例子,重点就是强调:分配内存的单位是字节(Byte),还是字(4Byte)。

4

哪些变量会占用任务内存

回到最开始的问题:一个任务需要分配多大内存?

任务堆栈就是用于存放该任务的变量数据(也就是程序在执行其他任务时,需要把该任务变量数据保存起来)。

那么,一个任务有哪些数据才算是“变量数据”呢?

一个是任务自身需要的内存空间,FreeROS任务自身(如TCB)需要的空间好像就七八十个字节(我之前计算过,记不得很清楚了)。

二是你自己应用程序临时变量(如下图),这个就是由你自己计算,或者估计大小。

许多朋友一上来直接分配堆栈的大小为256(x4字节),或512(x4字节),但自己应用程序临时变量并不多。

如果你应用程序就几个字节的临时变量,分配64(x4字节)都完全够你用。

提示:这个“临时变量”包含你应用程序调用的函数所分配的变量。

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

    关注

    8

    文章

    3128

    浏览量

    75365
  • 堆栈
    +关注

    关注

    0

    文章

    183

    浏览量

    20161
  • FreeRTOS
    +关注

    关注

    13

    文章

    493

    浏览量

    64541
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    超级电容阻值多少合适

    本文主要介绍了超级电容的核心参数——等效串联电阻(ESR),并讨论了如何在高功率脉冲设备和储能系统中找到合适的ESR值。此外,还提到了温度、电压和材料工艺对ESR的影响,并探讨了如何优化阻值的工程路径。
    的头像 发表于 07-03 09:36 ?217次阅读
    超级电容阻值多少<b class='flag-5'>才</b><b class='flag-5'>合适</b>?

    【RA4L1-SENSOR】04 用FreeRTOS重构工程

    内存块中分配内存,这对于系统内存不是连续块的情况非常有用。` 这里我选择Heap 4算法。 点击HAL/Common -- New Stack -- RTOS --
    发表于 06-16 22:28

    【RA-Eco-RA4M2开发板评测】RA-Eco-RA4M2 移植FreeRTOS

    Configuration->New Thread”即可新建一个任务。 Figure 2?7 配置任务 Common是关于FreeRTOS的配置,Thread是新建线程的配置参数
    发表于 05-03 23:24

    如何使用LAX_CODEGEN启用动态内存分配

    我目前正在探索NXP_MBDToolbox_LAX。lax_codegen 生成的代码基于静态分配。我想管理大型向量,如何使用 LAX_CODEGEN 启用动态内存分配
    发表于 04-10 08:09

    如何查看S32DS中S32平台的内存分配

    大家好,我正在使用 s32DS for s32 平台,我想查看我的项目的内存分配。我想知道分配给对象的内存以及它们被分配到哪里,例如 SRA
    发表于 04-09 07:30

    golang内存分配

    作者:钱文 Go 的分配采用了类似 tcmalloc 的结构.特点: 使用一小块一小块的连续内存页, 进行分配某个范围大小的内存需求. 比如某个连续 8KB 专门用于
    的头像 发表于 03-31 15:00 ?209次阅读
    golang<b class='flag-5'>内存</b><b class='flag-5'>分配</b>

    嵌入式开发避坑指南|FreeRTOS的5个\"反直觉\"小技巧

    技巧1:堆内存配置不是越大越好! 进阶原理: FreeRTOS内存分配存在\"碎片黑洞\"现象,即使总内存充足,碎片化仍可能导致
    发表于 03-20 13:57

    stm32F407平台上使用freertos,使用pvPortMalloc申请内存,发现内存中的数据总被修改,怎么解决?

    如题,我现在在stm32F407平台上打开FREERTOS,然后使用pvPortMalloc动态申请内存的时候,发现这块内存中的数据总是变化,后面改为malloc申请,内存中的数据就符
    发表于 03-07 09:03

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】05、FreeRTOS

    于系统内存不是连续块的情况非常有用。` 这里我选择Heap 4算法。 点击LED1 -- New Stack -- RTOS -- FreeRTOS Heap4 接下来可能会报错,要开启动态内存
    发表于 12-17 11:53

    opa627BP用来做前级放大,接地电阻用多少合适?反馈电阻用多少合适

    你好,opa627BP 用来做前级放大,接地电阻用多少合适,反馈电阻用多少合适,谢谢
    发表于 10-31 07:38

    如何使用反射内存交换机

    反射内存交换机是一种用于实现高速数据共享和通信的关键设备,以下是关于如何使用反射内存交换机的详细介绍:一、前期准备?在开始使用反射内存交换机之前,需要进行以下准备工作:?1.了解系统需
    发表于 09-14 09:23 ?0次下载

    转载 golang内存分配

    Go 的分配采用了类似 tcmalloc 的结构.特点: 使用一小块一小块的连续内存页, 进行分配某个范围大小的内存需求. 比如某个连续 8KB 专门用于
    的头像 发表于 09-05 14:12 ?522次阅读
    转载 golang<b class='flag-5'>内存</b><b class='flag-5'>分配</b>

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

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

    freertos最多支持多少个任务

    FreeRTOS是一个轻量级的实时操作系统(RTOS),其设计初衷就是为了提供简单、可靠且高效的实时任务管理。关于FreeRTOS最多支持多少个任务的问题,实际上并没有一个固定的上限,这主要取决于
    的头像 发表于 09-02 14:21 ?2333次阅读

    堆栈和内存的基本知识

    本文主要聊聊关于堆栈的内容。包括堆栈和内存的基本知识。常见和堆栈相关的 bug,如栈溢出,内存泄漏,堆内存分配失败等。后面介绍软件中堆栈统计
    的头像 发表于 08-29 14:10 ?1082次阅读
    堆栈和<b class='flag-5'>内存</b>的基本知识