您尚未登录。

楼主 # 2021-09-28 01:01:02

zxlch
会员
注册时间: 2021-09-28
已发帖子: 3
积分: 1.5

为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

开了几个比较大的数组内存(20K,10K,10K,10K还有几个小的,总计估计有130K左右)。
然后我后面检测内存,发现只要占用小于80KB左右的时候就重启了,不是WDT重启就是直接报内存问题重启。

我自己猜测是因为内存碎片太多,在申请内存发现申请不到符合要求的连续内存,所以重启了。但是也不会在剩余80K就重启吧?为什么会这样啊??

另,有没有什么API可以自己把申请的内存放在指定的位置,这样我直接初始化的时候把内存排好直接申请,这样可以把连续的内存都留出来。

离线

#1 2021-09-28 13:22:25

msr06rr
会员
所在地: 苏州
注册时间: 2018-01-11
已发帖子: 180
积分: 170.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

贴个复现代码上来看看呗

离线

#2 2021-09-28 15:26:37

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

定义全局数组不就是把连续内存保留出来吗,这时留给动态管理的内存就相应减少了。

离线

楼主 #3 2021-09-28 15:33:58

zxlch
会员
注册时间: 2021-09-28
已发帖子: 3
积分: 1.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

代码太长了不方便复制,内存必须保留系统才能正常吗?

离线

#4 2021-09-28 15:35:05

enjoyic
会员
注册时间: 2018-10-25
已发帖子: 17
积分: 12.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

一不小心看成了,做大项目会重启了。。。。

离线

楼主 #5 2021-09-28 15:35:22

zxlch
会员
注册时间: 2021-09-28
已发帖子: 3
积分: 1.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

armstrong 说:

定义全局数组不就是把连续内存保留出来吗,这时留给动态管理的内存就相应减少了。

是的,但是后面我有一些其他的服务,比如webserver,在内存剩余70k的时候webserver就不正常了,更准确的说就是会导致系统重启

离线

#6 2022-05-03 04:06:50

huxiao45
会员
注册时间: 2019-11-04
已发帖子: 10
积分: 4.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

我也发现这个问题了,70K启用WIFI基本上是不是成功的,会触发重启,如果还有70K,你禁掉部份IRAM能省个二三十K出来,就差不多够用了

离线

#7 2022-05-03 12:39:37

wxws
会员
注册时间: 2019-11-29
已发帖子: 30
积分: 28.5

Re: 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了?

esp32 跑rtos的呀,不能按常归mcu算。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn