1.1、存储管理:
作为一个RTOS操作系统,内存管理是必备的功能,因此UCOSIII也有内存管理能力。通常应用程序可以调用ANSI C编译器的malloc()和free()函数来动态的分配和释放内存,但是在嵌入式事实操作系统中最好不要这么做,多次这样的操作会把原来很大的一块连续存储区域逐渐地分割成许多非常小并且彼此不相邻的存储区域,这就是存储碎片。
UCOSIII中提供了一种替代malloc()和free()函数的方法,UCOSIII中将存储空间分成区和块,每个存储区有数量不等大小相同的存储块,在一个系统中可以有多个存储区。一般存储区是固定的,在程序中可以用数组来表示一个存储区,比如u8 buffer[20][10],就表示一个拥有20个存储块,每个存储块10个字节的存储区。
1.2、存储控制块:
UCOSIII中用存储控制块来表示存储区,存储控制块为OS_MEM。
struct os_mem {
OS_OBJ_TYPE Type;
void *AddrPtr;
CPU_CHAR *NamePtr;
void *FreeListPtr;
OS_MEM_SIZE BlkSize;
OS_MEM_QTY NbrMax;
OS_MEM_QTY NbrFree;
#if OS_CFG_DBG_EN > 0u
OS_MEM *DbgPrevPtr;
OS_MEM *DbgNextPtr;
#endif
};
创建好的存储区如下图
2.1、存储管理相关API函数:
OSMemCreate() 创建一个存储分区
OSMemGet() 从存储分区中获得一个存储块
OSMemPut() 将一个存储块归还到存储分区中