OS_MemInit 函数

//初始化内存分区 //这个函数是通过uCOS-II初始化内存分区,你的请求不能调用这个函数 //初始化内存管理 void OS_MemInit (void) { #if OS_MAX_MEM_PART == 1 //最多内存块的数目为1时 OSMemFreeList = (OS_MEM *)&OSMemTbl[0]; //内存块链接表=内存块首地址 OSMemFreeList->OSMemFreeList = (void *)0; //内存块链接表=0 OSMemFreeList->OSMemAddr = (void *)0; //内存区起始地址的指针=0 OSMemFreeList->OSMemNFree = 0; //空闲的内存块数目=0 OSMemFreeList->OSMemNBlks = 0; //该内存区的内存块总数=0 OSMemFreeList->OSMemBlkSize = 0; //内存块的大小=0 #endif #if OS_MAX_MEM_PART >= 2 //最多内存块的数目为多个时 OS_MEM *pmem; //定义内存块控制块的指针 INT16U i; //定义分区的内存数量 pmem = (OS_MEM *)&OSMemTbl[0]; //内存区控制块的指针=内存控制块(MCB)首地址 for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { //设定循环初始化(i次) pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; //内存块链接表=内存块地址(对应的分区) pmem->OSMemAddr = (void *)0; //内存区起始地址的指针=0 pmem->OSMemNFree = 0; //空闲的内存块数目=0 pmem->OSMemNBlks = 0; //该内存区的内存块总数=0 pmem->OSMemBlkSize = 0; //内存块的大小=0 pmem++; } pmem->OSMemFreeList = (void *)0; //初始化最后的内存块链接表 pmem->OSMemAddr = (void *)0; //内存区起始地址的指针=0 pmem->OSMemNFree = 0; //空闲的内存块数目=0 pmem->OSMemNBlks = 0; //该内存块的内存块总数=0 pmem->OSMemBlkSize = 0; //内存块的大小=0 OSMemFreeList = (OS_MEM *)&OSMemTbl[0]; //回到开始的内存块链接表 #endif }

你可能感兴趣的:(OS_MemInit 函数)