187***564
SDK如果用系统默认的malloc,采用的是什么内存分配算法,如何查看剩余空间大小?
Ping
可以通过Map文件进行分析,参考 gr5513 sdk ram划分问题 的回复说明,以GR5x25_1.0.0_1a87fc3f\projects\ble\ble_peripheral\ble_app_template_freertos例程为例,RAM的Layout分布说明如下:
1. 协议栈占用16KB,地址范围0x20000000 ~ 0x20003FFF,不可裁剪
2. RAM CODE空间,对应0x20004000 起始位置RAM空间
Execution Region RAM_CODE (Base: 0x00104000, Size: 0x00001484, Max: 0x00001fb0, ABSOLUTE)
2. RW区域
Execution Region RAM_RW (Base: 0x20005484, Size: 0x00001704, Max: 0x00040000, ABSOLUTE, COMPRESSED[0x00000790])
3. ZI区域
Execution Region RAM_ZI (Base: 0x20006b88, Size: 0x0000d1c4, Max: 0x00040000, ABSOLUTE)
4. 中断向量表,64Byte
Execution Region FPB_TABLE (Base: 0x20013d80, Size: 0x00000040, Max: 0x00000050, ABSOLUTE)
5. Heap区域内存,用Malloc接口分配的内存空间,默认为0
Execution Region ARM_LIB_HEAP (Base: 0x2003e000, Size: 0x00000000, Max: 0x00000000, ABSOLUTE)
6. 栈空间,8KB,不可裁剪
Execution Region ARM_LIB_STACK (Base: 0x2003e000, Size: 0x00002000, Max: 0x00002000, ABSOLUTE)
备注1:Keil编译的结果是不包含协议栈16KB、栈8KB以及RAM CODE空间的。
备注2:整理后的Layout示例空间如下:
Ping
系统默认的malloc,分配的就是Heap空间,大小可以通过Custom config以下宏定义配置。
Ping
建议用我们SDK提供的内存分配接口app_malloc或者freertos的pvPortMalloc,主要原因如下:
1. 系统的malloc不支持重入;
2. 内存管理没有我们提供的API高效;
如果都是用我们SDK封装的内存接口,可以通过如下接口获取内存分配信息:
/**
*****************************************************************************************
* @brief Get current free size of app memory.
*****************************************************************************************
*/
size_t app_mem_curr_free_size_get(void);
/**
*****************************************************************************************
* @brief Get ever min free size of app memory.
*****************************************************************************************
*/
size_t app_mem_ever_free_min_size_get(void);
/** @} */
打开微信,使用“扫一扫”即可关注