ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?
ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?
esp32-c2添加ble和WiFi功能后初始ram只有128k可用。在ble以及WiFi初始化完成后仅剩16k ram了
Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?
我也是c2,你没有优化对,我在开了nimble、wifi、mqtt还剩80kb
Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?
蓝牙使用的是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这个缓存的配置。如果你流量大,那就根据你实际调整,我这个已经是很极限了
其实哪个案例不重要,重要的是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这个缓存的配置。如果你流量大,那就根据你实际调整,我这个已经是很极限了
Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?
我的极限内存是开了https mbedtls ota升级过程中产生的,如果不启动这个升级过程,那么内存是完全随便用的
Re: ESP32-C2开启BLE和WiFi后RAM仅剩16k,这该如何优化?
我的idf版本是 5.2.1
Who is online
Users browsing this forum: No registered users and 41 guests