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

一位朋友问:黄哥,我刚学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字节)都完全够你用。
提示:这个“临时变量”包含你应用程序调用的函数所分配的变量。

应用案例:科技赋能,让物流园区更具“智慧”
企鹅医生构建的线上线下服务体系蓝图的落地,加快未来智能医疗化
uc3842引脚图 uc3842引脚功能
微软Windows 10获得全新用户界面
罗德与施瓦茨宣布针对5G NR第17版的综合测试解决方案
关于FreeRTOS内存分配多少才合适
过程控制系统经历过的三个发展阶段
70年人工智能研究,解读研究者最大的惨痛教训经验
CASAIM广州中大型工件形位公差三维扫描尺寸三维测量解决方案
ES32F36xx芯片发生HardFault异常时的函数调用关系及问题定位
用于大功率的三相AC-DC电源转换
德索LVDS线束加工材料选择
英特尔On产业创新峰会精彩抢先看
CCD图像传感器中的光子噪声、读取噪声和复位噪声
电力变压器电抗标幺值公式
阿吉兰兄弟控股集团与正泰成立合资公司
中国电信福建分公司实现5G和现网4G互操作,加速5G SA的全面商用
释放智能制造新能动,“汇川号”西部之旅完美收官
电容放电电阻接线_法拉电容放电时间计算
索尼大法好:利用屏幕发声的黑科技 索尼A1E电视是怎么做到的?