uc/os-iii学习笔记---存储管理(内存管理)
来源:互联网 发布:国税局在线发票软件 编辑:程序博客网 时间:2024/06/05 01:01
内存管理
我本人觉得内存管理反而是最容易的管理函数。
作为一个RTOS操作系统,内存管理是必备的功能,因此UCOSIII也就内存管理能力。通常应用程序可以调用ANSI C编译器的malloc()和free()函数来动态的分配和释放内存,但是在嵌入式事实操作系统中最好不要这么做,多次这样的操作会把原来很大的一块连续存储区域逐渐地分割成许多非常小并且彼此不相邻的存储区域,这就是存储碎片。
UCOSIII中提供了一种替代malloc()和free()函数的方法,UCOSIII中将存储空间分成区和块,每个存储区有数量不等大小相同的存储块,在一个系统中可以有多个存储区。
一般存储区是固定的,在程序中可以用数组来表示一个存储区,比如u8 buffer[20][10],就表示一个拥有20个存储块,每个存储块10个字节的存储区。
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};
函数相关:
举个例子:
//定义一个存储区OS_MEM INTERNAL_MEM; //存储区中存储块数量#define INTERNAL_MEM_NUM 5//每个存储块大小#define INTERNAL_MEMBLOCK_SIZE 100 //内存池使用内部RAMCPU_INT08U Internal_RamMemp[INTERNAL_MEM_NUM][INTERNAL_MEMBLOCK_SIZE];OSMemCreate((OS_MEM* )&INTERNAL_MEM,//需要在代码最前面定义,指向存储区 (CPU_CHAR* )"Internal Mem",//存储区名字 (void* )&Internal_RamMemp[0][0],//存储区基地址 (OS_MEM_QTY )INTERNAL_MEM_NUM,//有多少个存储块可用,建议宏定义 (OS_MEM_SIZE)INTERNAL_MEMBLOCK_SIZE,//每个存储块大小,建议宏定义 (OS_ERR* )&err);
//申请存储块OSMemGet((OS_MEM*)&INTERNAL_MEM, (OS_ERR*)&err);
//释放存储块OSMemPut((OS_MEM* )&INTERNAL_MEM, (void* )internal_buf, (OS_ERR* )&err);
需要注意的是,申请一次后,必须对应的释放一次,而且必须连续成对,如果申请四次后再释放四次,去查看的话却只能再申请一次。也就是说,申请一次后,下一个执行的内存函数必须是释放。
0 0
- uc/os-iii学习笔记---存储管理(内存管理)
- uc/os-iii学习笔记-任务管理
- uc/os-iii学习笔记-中断管理
- uc/os-iii学习笔记-时间管理
- uc/os iii(二)时间管理
- uC/OS学习笔记——内存管理
- uC/OS-III 学习笔记 (X)
- uc/os学习笔记1【uc/os的任务管理】
- uC/OS iii(三)任务管理之任务状态
- uc/os-III任务管理总结
- uC/OS-III的任务管理
- uC/OS-III之中断管理总结
- uC/OS-III之时间管理
- uC/OS-III之定时器管理
- UC/OS - II内存管理
- UC/OS II 内存管理
- uC/OS-III 学习笔记(一)——uC/OS-III移植
- UC/OS学习 任务管理
- hdu 5183 Negative and Positive (NP)(hash,思路)
- Spring-11:通过FactoryBean配置Bean
- LifeRay 6.2 视频教程内容记录
- HDU5723 2016 Multi-University Training Contest 1 (最小生成树+dfs)
- [汇编]伪指令(二)
- uc/os-iii学习笔记---存储管理(内存管理)
- Socket的Send,Recv的长度问题
- 面试知识
- .NET 配置文件自定义
- codeforces#363 C. Vacations dp做法
- iOS(xcode) 加入openssl的方法
- 2016暑期集训---搜索(简单BFS)
- Java多线程-线程的同步与锁
- HDU 5726-GCD