2.通过FreeRTOSConfig.h配置堆的大小,注意大小单位为字节。
提示:heap_1至heap_5其他管理方式其实还是有很大差别,这里不讲述(后面抽时间再讲述),具体可以参看:
3
系统资源内存分配 FreeRTOS中系统为各资源分配内存,使用heap_4内存管理方式就是在创建之初就分配一段内存。
而分配的这个资源就是从整个系统堆ucHeap划分了一块出来。我们创建一个任务,分配堆栈大小的原理,进一步查看代码:
提示:这个创建任务大小为我们填写数值x4字节。比如,填写128,其实分配的空间为512Byte.(很多人以为单位是字节,发现多创建几个任务,内存就分配失败了)
再比如,创建队列:
**参数1:**队列长度,也就是队列的数量;
**参数2:**队列大小,也就是一个队列有多少字节;
队列分配的内存大小就是:参数1 x 参数2 (单位Byte)。
这里就举上面两个例子,重点就是强调:分配内存的单位是字节(Byte),还是字(4Byte)。
4
哪些变量会占用任务内存 回到最开始的问题:一个任务需要分配多大内存?
任务堆栈就是用于存放该任务的变量数据(也就是程序在执行其他任务时,需要把该任务变量数据保存起来)。
那么,一个任务有哪些数据才算是“变量数据”呢?
一个是任务自身需要的内存空间,FreeROS任务自身(如TCB)需要的空间好像就七八十个字节(我之前计算过,记不得很清楚了)。
二是你自己应用程序临时变量(如下图),这个就是由你自己计算,或者估计大小。
许多朋友一上来直接分配堆栈的大小为256(x4字节),或512(x4字节),但自己应用程序临时变量并不多。
如果你应用程序就几个字节的临时变量,分配64(x4字节)都完全够你用。
提示:这个“临时变量”包含你应用程序调用的函数所分配的变量。
好了,方法就教大家到这里,一些知识的思路是相通的。
推荐阅读:
5最后
若觉得文章对你有帮助,随手点赞、分享,也是对我莫大的支持和鼓励。
扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!
长按识别图中二维码关注
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新