各位大佬,关于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());
感谢大佬回复,我们工程就是在您这个例子上开发的,加了蓝牙功能出现了一些异常,正在排查