ucosii内存管理代码的分析
1.ucosii内存管理的简易原理 ucosii的内存管理,采用的是如下方式,先分成若干个partitions,每个partitions再分成若干个blocks,每个blocks可以划分成若干大小的blksize(ucosii中,对blocksize的缩写)。使用时,通常在task中定义一个局部二维数组作为内存管理的“载体”,这个局部二维数组就是1个partitions,数组的行数是blocks,数组的列数是blksize,局部二维数组完美契合了ucosii中内存管理的特性。 2.ucosii内存管理的代码分析 ucosii的内存管理中使用了二维指针来进行链表的构建,与“正常”的链表有点区别,本文对ucosii中的易混淆的点和重点进行分析。 (1)OSMemFreeList在内存管理的代码中用了“两次”? 在ucosii.h中,有如下定义: OS_EXT OS_MEM *OSMemFreeList; /* Pointer to free list of memory partitions */ 有如下声明 typedef struct os_mem { /* MEMORY CONTROL BLOCK */ void *OSMemAddr; /* Pointer to beginning of memory partition */ void *OSMemFreeList; /*