ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Aliveri
Posts: 2
Joined: Wed Aug 07, 2024 2:29 am

ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby Aliveri » Wed Aug 07, 2024 2:35 am

esp32-c2添加ble和WiFi功能后初始ram只有128k可用。在ble以及WiFi初始化完成后仅剩16k ram了

suki1213
Posts: 19
Joined: Wed May 29, 2024 3:24 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby suki1213 » Wed Aug 21, 2024 1:31 am

请问解决了吗

Dennie
Posts: 6
Joined: Fri Aug 30, 2024 2:22 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby Dennie » Fri Aug 30, 2024 2:37 am

我也是c2,你没有优化对,我在开了nimble、wifi、mqtt还剩80kb

suki1213
Posts: 19
Joined: Wed May 29, 2024 3:24 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby suki1213 » Fri Aug 30, 2024 5:50 am

Dennie wrote:
Fri Aug 30, 2024 2:37 am
我也是c2,你没有优化对,我在开了nimble、wifi、mqtt还剩80kb
你好,请问你参考的是nimble的哪一个例程呢 可以说一下吗

Dennie
Posts: 6
Joined: Fri Aug 30, 2024 2:22 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby Dennie » Fri Aug 30, 2024 7:12 am

蓝牙使用的是bleprph案例,这个是nimble带安全Pin码的案例,然后WiFi(只开sta模式)的话,用的是blufi的WiFi那一块,我把它拆出来了,目前经过我的优化,内存很够用,现在正常运行态是67kb,极限堆栈剩35kb左右,一共20个task。

其实哪个案例不重要,重要的是menuconfig的优化,我在这给你几个建议:
①对于蓝牙,不要用bluedroid,我一开始用bluedroid,内存相当吃紧。然后nimble怎么优化呢?在Component config → Bluetooth → NimBLE Options → Memory Settings中,把缓存改了,经过我的测试,以下配置,蓝牙仍然可以用,当然你如果要传大量的数据的话,根据你自己实际情况改,太小了蓝牙会崩溃。(我一次最多才一两百字节)
(6) MSYS_1 Block Count
(200) MSYS_1 Block Size
(0) MSYS_2 Block Count
(0) MSYS_2 Block Size
(4) ACL Buffer count
(84) Transport ACL Buffer size
(84) Transport Event Buffer size
(4) Transport Event Buffer count
(2) Discardable Transport Event Buffer count
②对于WiFi,只开sta的话,把ap给关掉,然后缓存用动态缓存,大小这么配置(我的流量非常小,所以实际看你的情况):
(2) Max number of WiFi static RX buffers
(32) Max number of WiFi dynamic RX buffers
Type of WiFi TX buffers (Dynamic) --->
(32) Max number of WiFi dynamic TX buffers
Type of WiFi RX MGMT buffers (Dynamic) --->
(5) Max number of WiFi RX MGMT buffers
[*] WiFi AMPDU TX
(6) WiFi AMPDU TX BA window size
[*] WiFi AMPDU RX
(2) WiFi AMPDU RX BA window size
// 这三个IRAM都给屏蔽了,很大
[ ] WiFi IRAM speed optimization
[ ] WiFi EXTRA IRAM speed optimization
[ ] WiFi RX IRAM speed optimization
③然后对于其他系统级别的任务,你如果用不着Tmr Svc、sys_evt、esp_timer的话,去idf的文件夹里把它的堆栈限制给改了,让它可以配的更小
④对于一些这样的选项:它要把function放在RAM里面,一个个都给它取消掉(就像上面的WiFi那三个选项),如果哪个导致了系统运行崩溃就撤销掉。
⑤ESP的Log我在优化测试的时候好像也是会用掉一些内存,log还是要打印的,但是如果你不用vscode的终端看打印,可以把颜色给关掉(好像是会节约1000多个字节我记得),Component config → Log output ->Use ANSI terminal colors in log output

然后其他的好像就没了,主要就是蓝牙跟WiFi这个缓存的配置。如果你流量大,那就根据你实际调整,我这个已经是很极限了

Dennie
Posts: 6
Joined: Fri Aug 30, 2024 2:22 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby Dennie » Fri Aug 30, 2024 7:20 am

我的极限内存是开了https mbedtls ota升级过程中产生的,如果不启动这个升级过程,那么内存是完全随便用的

Dennie
Posts: 6
Joined: Fri Aug 30, 2024 2:22 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby Dennie » Fri Aug 30, 2024 7:23 am

我的idf版本是 5.2.1

suki1213
Posts: 19
Joined: Wed May 29, 2024 3:24 am

Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?

Postby suki1213 » Fri Aug 30, 2024 9:05 am

感谢

Who is online

Users browsing this forum: Baidu [Spider], Bing [Bot] and 142 guests