一、前言
在嵌入式系统中,时常会面临Ram受限的情况。所以用C lib里的,malloc()和 free()来申请和释放内存时,频繁的内存请求造成的内存碎片会对系统性能造成负面影响。Ucos的解决办法是为内存划分不同大小的内存区域,每个区域内有一定数量、相同大小的内存块。每次申请内存都必须要以一个内存块为单位,释放内存块时,该内存块会回到相应的内存分区。这样,确实,内存的碎片的问题得到了一定程度的解决。
然而,这意味着内存管理对编码的人来说,是不透明的。牺牲灵活性的代价就是用户必须提前根据自己的实际需要,把空闲内存划分成不同的内存分区,再把内存分区切割成几个相同大小的内存块。即使是在系统运行过程中的动态内存请求,编码的人也要提前为自己不同的任务分配内存区域和内存块。UCOS的使用者必须纵观整个项目,构建出最合适的memory map,才能高效使用ram资源。
二、内存控制块
MCB用来定义一个内存区域的属性。这种有点类似面向对象的控制结构在UCOSii里很常见,只要在Tcb、Ecb和Mcb这样的控制块中,加入一些方法,这个控制块瞬间就变成了一个类。只是出于实时性的需要,RTOS一般使用效率更高的结构性语言而经常与高级语言无缘,但UCOSii作者的设计思想依然很值得我们借鉴。
MCB原型:
typedef struct {