欢迎来到天天文库
浏览记录
ID:42486883
大小:214.00 KB
页数:18页
时间:2019-09-16
《RTOS uCOS-II 原理及应用 -- 6》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、嵌入式实时操作系统μC/OS-II西安邮电学院----计算机系Tel:85383409(ZQL)Email:zql@xiyou.edu.cn10/4/20211西安邮电学院计算机系第6章内存的动态分配10/4/20212西安邮电学院计算机系第6章目录1、内存控制块2、动态内存的管理10/4/20213西安邮电学院计算机系应用程序运行中有时需要临时用到一些内存资源,操作系统应能提供相应的“动态内存分配”管理功能(举例见下页)。uC/OS-II支持动态内存分配管理。本章主要内容:uC/OS-II动态内存管理方式;内存分区与内存控制
2、块;动态内存管理系统函数;10/4/20214西安邮电学院计算机系例如:消息队列应用中的“消息缓冲区”通常就是用“动态分配的存储块”实现。10/4/20215西安邮电学院计算机系第6章目录1、内存控制块2、动态内存的管理10/4/20216西安邮电学院计算机系6.1内存控制块uC/OS-II中将连续的大块内存按分区来管理,称之为“内存分区”。分区由若干个体积相等、类型一致的“内存块”组成。uC/OS-II系统配置文件(OS_CFG.H)中的OS_MEM_EN用于“使能/禁能”动态内存的功能支持。uC/OS-II使用“内存控制块”
3、(MCB)具体管理内存分区以及分区中的内存块,分区与MCB有“一对一”的关系。10/4/20217西安邮电学院计算机系6.1内存控制块ECM是一个下述的数据结构:typedefstruct{void*OSMemAddr;void*OSMemFreeList;INT32UOSMemBlkSize;INT32UOSMemNBlks;INT32UOSMemNFree;}OS_MEM;备注:OS_MEM是uC/OS-II的系统管理资源,对用户几乎透明;在使用中,用户不必对其直接操作,用户通过系统函数管理动态内存。10/4/20218西安
4、邮电学院计算机系6.1内存控制块内存中建立分区和内存块的方法:声明一个二位数组;使用系统函数直接创建动态分区即可;INT8UM_BLK[30][80];备注:准备建立一个含有30个动态存储块,每个存储块具有80个INT8U数据类型单元的内存分区。10/4/20219西安邮电学院计算机系第6章目录1、内存控制块2、动态内存的管理10/4/202110西安邮电学院计算机系6.2动态内存的管理用户通过使用uC/OS-II提供的系统函数来使用、管理动态内存:OSMemCreate()---创建动态内存分区;OSMemGet()---从指
5、定分区获得一个内存块;OSMemPut()---将内存块归还指定分区;10/4/202111西安邮电学院计算机系6.2动态内存的管理创建动态内存分区---OSMemCreate()在使用一个内存分区之前,首先要使用OSMemCreate()函数建立该分区;该系统函数的原型:OS_MEM*OSMemCreate(void*addr,//内存分区指针INT32Unblks,//分区中的内存块总数INT32Ublksize,//内存块大小INT8U*err//出错信息);备注:函数正常返回一个“内存分区控制块”指针;否则,返回一个NU
6、LL指针。10/4/202112西安邮电学院计算机系6.2动态内存的管理创建动态内存分区---OSMemCreate()举例:OS_MEM*CommTxBuf;//声明内存控制块指针INT8UCommTxPart[30][80];//声明内存控制块格式……voidmain(void){INT8U*err;OSInit();……;CommTxBuf=OSMemCreate(CommTxPart,30,80,err);……;OSStart();}10/4/202113西安邮电学院计算机系6.2动态内存的管理从指定分区获得一个内存块-
7、--OSMemGet()创建了内存分区之后,既可以使用OSMemGet()函数从指定分区获得一个内存块;该系统函数的原型:void*OSMemGet(OS_MEM*pmem,//内存分区控制块指针INT8U*err//出错信息);备注:函数正常返回一个“内存块”指针;否则,返回一个NULL指针。在使用申请到的内存块时,切勿越界。用完后要及时归还。10/4/202114西安邮电学院计算机系6.2动态内存的管理从指定分区获得一个内存块---OSMemGet()举例:OS_MEM*CommTxBuf;INT8UCommTxPart[3
8、0][80];INT8Uerr;INT8U*BlkPtr;voidmain(void){……;OSInit();……;CommTxBuf=OSMemCreate(CommTxPart,30,80,&err);……OSStart();}voidMyTask(voi
此文档下载收益归作者所有