各位大佬,關於W801芯片,請教一個問題
1、使用10.00.08 SDK編譯打印一句Hello World,內存占用如下:
Memory region Used Size Region Size %age Used
I-SRAM: 663184 B 1152 KB 56.22%
D-SRAM: 164556 B 294652 B 55.85%
V-SRAM: 0 GB 256 B 0.00%
2、然後移植了LVGL 8.3.4之後,添加了4個按鍵的驅動,內存占用如下:
Memory region Used Size Region Size %age Used
I-SRAM: 863888 B 1152 KB 73.23%
D-SRAM: 246220 B 294652 B 83.56%
V-SRAM: 0 GB 256 B 0.00%
3、之後打開藍牙Client模式,添加一些LVGL的頁面,編譯後內存占用如下:
Memory region Used Size Region Size %age Used
I-SRAM: 1011232 B 1152 KB 85.72%
D-SRAM: 240192 B 294652 B 81.52%
V-SRAM: 0 GB 256 B 0.00%
請問大佬,W801芯片在官方頁面標示內存為288K,從ld文件可以看到D-SRAM就是所有的288K。所以是否觀察D-SRAM的百分比就可以大約估算內存占用呢?
W800/W801芯片BLE功能的內存占用大約是多少呢?以前使用過別的芯片,別家IOT芯片大約是70K左右,如果這個占用比例的話,需要占288K內存的25%,從觀察來看應該是不足的。我們在使用過程中遇到的藍牙內存分配報錯或者死機會不會和這個有關聯呢?
另外Nimble裡面應該是使用了malloc和free這類堆內存,堆內存應該不會顯示在內存占用裡面,所以實際內存占用肯定是大於編譯後顯示的D-SRAM百分比,這個理解是否正確呢?
本人小白一枚,剛開始入手這芯片,希望大佬們能夠不吝指教,十分感激。
1、288KB內存是物理大小內存,其中 分為兩個大的部分,一部分是程序占用以及堆內存空間分配的內存,另一部分是WIFIbuffer 、BLEbuffer、HSPIbuffer 等使用空間,分界線就在鏈接腳本的 PROVIDE (__ram_end = 0x2003A000); 這句話,頭文件配置在 wm_ram_config.h 文件。
2、LVGL 占用內存較大,建議關閉一些不用的功能節省空間,如AT指令可在 wm_config.h 文件中關閉,關閉後 重新 完全編譯。
3、print-memory-usage 參數只能看到靜態內存的占用。
4、藍牙的內存分配釋放 都是靜態的 自己管理的不適用系統 malloc free
這裡有移植好的SDK,http://ask.winnermicro.com/article/76.html
剩餘內存用這個看 printf("---> GetHeap:%d\n",tls_mem_get_avail_heapsize());
感謝大佬回複,我們工程就是在您這個例子上開發的,加了藍牙功能出現了一些異常,正在排查