良许Linux教程网 干货合集 FreeRTOS内存分配多少才合适

FreeRTOS内存分配多少才合适

有一位朋友问我,他刚学习FreeRTOS不久,想知道何时创建一个任务所需的堆栈分配量是多少合适。操作系统内存分配涉及的知识比较广泛,包括内存管理和资源分配等方面。在FreeRTOS中,使用堆来实现内存管理。在MemMang文件夹中,heap_1到heap_5为提供多种内存管理方式的文件。在FreeRTOS中,最常用的堆管理方式是heap_4,这种方法通过为系统资源分配堆(数组)来实现内存管理。要回答这个问题,需要了解堆大小的计算和内存需求。确切的数字取决于任务所需的堆栈大小和系统可用堆的大小,计算这两个参数将有助于确定堆栈分配量。因此,计算任务所需的堆栈大小和可用堆的大小将有助于确定创建任务所需的合适堆栈分配量,这是任务创建的重要一步。

image-20231230212527718
image-20231230212527718

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

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

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

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

3系统资源内存分配

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

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

image-20231230212539936
image-20231230212539936

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

再比如,创建队列:

image-20231230212543367
image-20231230212543367

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

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

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

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

4哪些变量会占用任务内存

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

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

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

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

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

image-20231230212547513
image-20231230212547513

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

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

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

好了,方法就教大家到这里,一些知识的思路是相通的。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部