uCOS内存管理思路#
uCOS的内存管理非常简单,有5个连接在一起的partition,这5个partition又分别连接着一系列的size固定,个数确定的block。
也就是说每一个partition只能有一个size,能够使用的内存大小就只有这五种。
好处是内存分配是常数时间,而且是很快的常数时间。在5个partition中遍历一下找到适合的size,直接取对应的freelist即可。
坏处就是内存分配非常的不灵活,只有固定大小的内存块。
OS_MemInit#
初始化OSMemTbl,存储5个partition的基本信息,将五个partition串联起来。
OSMemCreate#
将给定的内存地址addr,内存块大小size,内存块数量n,配置给一个空的partition,讲这些信息写入到partition的头信息中,并且将partition设为已经配置完成。
OSMemGet#
给定一个指向partition的指针,在这里面直接取freelist的第一个。
OSMemPut#
给定指向内存块的地址,和它的partition,将这个内存区域放到freelist中。