1. memPart基本原理
uC/OS-II根據需要將內存空間分成多個內存分區,每個內存分區由具有相同大小的內存塊(Block)組成。主要包含在C源文件OS_MEM.C中。
OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];
OS_EXT OS_MEM *OSMemFreeList;
memPart控制塊結構體:
typedef struct os_men{
void *OSMemAddr; //首地址
void *OSMemFreeList; //分區中空閒空間的起始地址
INT32U OSMemBlkSize; //分區中塊成員空間大小
INT32U OSMemNBlks; //塊結構數量
INT32U OSMemNFree; //剩餘空閒塊個數
INT8U OSMemName[];
}OS_MEM;
2. memPart管理函數
OS_MEM *OSMemCreate(void *addr, INT32U nblks,
INT32U blksize, INT8U *err);
void *OSMemGet(OS_MEM *pmem, INT8U *err); //申請內存分區塊
INT8U OSMemPut(OS_MEM *pmem, void *pblk); //釋放內存分區塊
INT8U OSMemQuery(OS_MEM *pmem, OS_MEM_DATA*);
INT8U OSMemNameGet(OS_MEM *pmem, INT8U *pname, INT8U *err);
INT8U OSMemNameSet(OS_MEM *pmem, INT8U *pname, INT8U *err);
3. memPart幾個問題
(1)能不能一次申請1B的堆空間?
(2)uC/OS-II在申請棧空間和堆空間時有什麼不同?