记录一个FreeRTOS堆栈溢出的问题

针对单片机平台,在函数体实现中,如果要分配大容量的内存,最好是使用堆上分配的方式。

问题描述

目前遇到在函数实现中,多次定义256Bytes的数组,导致栈空间溢出。目前平台无法使用调试器调试,只能加日志打印或者使用代码注释的方式定位出问题的地方。最后发现是定义了256Bytes数组导致的。

解决方案

调整栈内存总大小
调整栈空间大小。这个需要在内存分配的时候,确定栈空间大小,这个不太好动态调整。如果项目要加代码,又要重新评估栈空间够不够用。

使用堆内存分配
使用堆内存分配有三种方式。需要根据实际情况选择使用。

static分配
使用static关键字申明,分配的内存会是在堆上。static分配可以是在全局,也可以是在局部,如果使用的内存是持久化的,并且只能内部单独使用,不同线程公用会有问题的话,适合使用这种分配方式,但是多次分配会造成堆内存的浪费。

全局变量
全局变量加不加static都是在堆上分配,这个适合多个地方同时都要使用这个内存,但是不会同时使用的情况,或者可以加锁让其可同时使用,使用不会是持久化的。

malloc分配
这种方式比较灵活,弥补了上述分配方式的不足。但是单片机平台,容易造成内存泄漏。一般MCU平台是能不用malloc就不用malloc的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值