近来学习了UCOS-II嵌入式操作系统,感慨颇多。
首先是系统麻雀虽小,五脏俱全,然后是不管讲的如何简单,都应该看一下代码。
下面将相关的东西总结一下:
UCOS对内存进行两级管理,即将连续的内存空间分成若干个内存分区,一个内存分区里面又有若干个大小相等的内存块。操作系统对内存分区为单位对内存进行管理,任务以内存块为单位来获得和释放动态内存。而内存分区和内存块的使用情况则是通过内存控制块来进行记录。
内存控制块:
typedef struct os_mem {
void *OSMemAddr;//当前内存分区的起始地址
void *OSMemFreeList;//**内存块和内存分区的链表指针**
INT32U OSMemBlkSize;//当前内存分区的内存块大小
INT32U OSMemNBlks;//当前内存分区中内存块的数目
INT32U OSMemNFree;//当前内存分区中未被使用的内存块数目
} OS_MEM;
上述的指针OSMemFreeList需要特别注意一下。
首先系统在ucos_ii.h中已经声明了如下相关内容:
extern OS_MEM *OSMemFreeList;//内存分区链表头指针
extern OS_MEM OSMemTbl[OS_MAX_MEM_PART];//内存分区数组
然后动态内存分配主要涉及以下