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空间,跟内存池不会发生冲突。 |