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