6621系列内存管理说明

zengsr · 625次点击 · 2023-07-25

6621系列主要有三套SDK,6621A/C/P一套,6621D/F一套,6621E一套,各不相同。

协议栈内部使用内存池来管理协议栈动态内存,但是这个内存池在各个SDK上的使用有些不同,而且会影响到供客户使用的malloc接口,下面做个简单说明:


对于6621A/C/P,内存池的内存是通过全局变量来分配,api是ke_mem_init。

供客户使用的malloc接口,keil工程里的内存来源是标准heap;gcc工程里的内存来源是stack。

所以在这款chip的sdk里使用malloc,如果是keil工程,需要配置heap大小;如果是gcc工程,就不需要,但是可能需要增大stack的大小。


对于6621D/F,内存池的内存是通过标准heap分配,api是co_malloc。

正因为标准heap的内存空间被内存池接管了,所以当客户使用malloc接口的时候,会跟内存池发生冲突,出现数据错乱的问题。

因此,客户如果希望使用heap,只能通过co_malloc,不能通过malloc。但是不建议使用,因为可能会因为客户用的heap太多了,导致协议栈内部想使用内存池的时候内存不够用了。


对于6621E,内存池的内存是通过非标准heap分配,api是co_malloc。

所以它解决了6621D/F出现的问题,客户可以直接使用标准的malloc,它会使用标准的heap空间,跟内存池不会发生冲突。


被收藏 2  ∙  1 赞  
加入收藏
点赞
3 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站