收藏 分享(赏)

嵌入式实时操作系统.ppt

上传人:无敌 文档编号:1377207 上传时间:2018-07-07 格式:PPT 页数:18 大小:211.50KB
下载 相关 举报
嵌入式实时操作系统.ppt_第1页
第1页 / 共18页
嵌入式实时操作系统.ppt_第2页
第2页 / 共18页
嵌入式实时操作系统.ppt_第3页
第3页 / 共18页
嵌入式实时操作系统.ppt_第4页
第4页 / 共18页
嵌入式实时操作系统.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、西安邮电学院 计算机系,1,2018/7/7,嵌入式实时操作系统 C/OS-II,西安邮电学院-计算机系Tel: 85383409 (ZQL)Email: ,2018/7/7,西安邮电学院 计算机系,2,第6章 内存的动态分配,西安邮电学院 计算机系,3,2018/7/7,第6章 目录,1、 内存控制块2、 动态内存的管理,西安邮电学院 计算机系,4,2018/7/7,应用程序运行中有时需要临时用到一些内存资源,操作系统应能提供相应的 “动态内存分配” 管理功能(举例见下页)。uC/OS-II 支持动态内存分配管理。本章主要内容:,uC/OS-II动态内存管理方式;内存分区与内存控制块;动态内

2、存管理系统函数;,西安邮电学院 计算机系,5,2018/7/7,例如:消息队列应用中的 “消息缓冲区” 通常就是用 “动态分配的存储块” 实现。,西安邮电学院 计算机系,6,2018/7/7,第6章 目录,1、 内存控制块2、 动态内存的管理,西安邮电学院 计算机系,7,2018/7/7,6.1 内存控制块,uC/OS-II中将连续的大块内存按分区来管理,称之为 “内存分区”。分区由若干个体积相等、类型一致的 “内存块” 组成。uC/OS-II系统配置文件(OS_CFG.H)中的 OS_MEM_EN 用于“使能/禁能” 动态内存的功能支持。uC/OS-II使用 “内存控制块” (MCB)具体管

3、理内存分区以及分区中的内存块,分区与MCB有 “一对一” 的关系。,西安邮电学院 计算机系,8,2018/7/7,6.1 内存控制块,ECM 是一个下述的数据结构:,typedef struct void *OSMemAddr; void *OSMemFreeList; INT32U OSMemBlkSize; INT32U OSMemNBlks; INT32U OSMemNFree; OS_MEM ;,备注:OS_MEM 是 uC/OS-II 的系统管理资源,对用户几乎透明;在使用中,用户不必对其直接操作,用户通过系统函数管理动态内存。,西安邮电学院 计算机系,9,2018/7/7,6.1

4、内存控制块,内存中建立分区和内存块的方法:,声明一个二位数组;使用系统函数直接创建动态分区即可;,INT8U M_BLK 3080; 备注: 准备建立一个含有 30 个动态存储块,每个存储块具有 80 个 INT8U 数据类型单元的内存分区。,西安邮电学院 计算机系,10,2018/7/7,第6章 目录,1、 内存控制块2、 动态内存的管理,西安邮电学院 计算机系,11,2018/7/7,6.2 动态内存的管理,用户通过使用uC/OS-II提供的系统函数来使用、管理动态内存:,OSMemCreate( ) - 创建动态内存分区;OSMemGet( ) - 从指定分区获得一个内存块;OSMemP

5、ut( ) - 将内存块归还指定分区;,西安邮电学院 计算机系,12,2018/7/7,6.2 动态内存的管理,创建动态内存分区 - OSMemCreate( ),在使用一个内存分区之前,首先要使用OSMemCreate( )函数建立该分区;该系统函数的原型:,OS_MEM *OSMemCreate(void *addr,/内存分区指针INT32U nblks,/分区中的内存块总数INT32U blksize,/内存块大小INT8U *err/出错信息);,备注:函数正常返回一个 “内存分区控制块” 指针;否则,返回一个 NULL 指针。,西安邮电学院 计算机系,13,2018/7/7,6.2

6、 动态内存的管理,创建动态内存分区 - OSMemCreate( ) 举例:,OS_MEM *CommTxBuf;/声明内存控制块指针INT8U CommTxPart3080;/声明内存控制块格式void main (void) INT8U *err; OSInit( ); ; CommTxBuf = OSMemCreate(CommTxPart,30,80,err); ; OSStart( );,西安邮电学院 计算机系,14,2018/7/7,6.2 动态内存的管理,从指定分区获得一个内存块 - OSMemGet( ),创建了内存分区之后,既可以使用OSMemGet( )函数从指定分区获得一

7、个内存块;该系统函数的原型:,void *OSMemGet(OS_MEM *pmem,/内存分区控制块指针INT8U *err/出错信息);,备注:函数正常返回一个 “内存块” 指针;否则,返回一个 NULL 指针。在使用申请到的内存块时,切勿越界。用完后要及时归还。,西安邮电学院 计算机系,15,2018/7/7,6.2 动态内存的管理,从指定分区获得一个内存块 - OSMemGet( ) 举例:,OS_MEM *CommTxBuf;INT8U CommTxPart3080;INT8U err;INT8U *BlkPtr;void main (void) ; OSInit( ); ; Com

8、mTxBuf = OSMemCreate(CommTxPart,30,80,void MyTask(void *pdata) ; for (;) ; BlkPtr = OSMemGet(CommTxBuf, /使用内存块 BlkPtr ,西安邮电学院 计算机系,16,2018/7/7,6.2 动态内存的管理,将内存块归还制定分区 - OSMemPut( ),在一个内存块使用后,应使用OSMemPut( )函数尽快将内存块归还相应分区;该系统函数的原型:,INT8U OSMemPut(OS_MEM *pmem,/内存分区控制块指针void *pblk/欲归还的内存块指针);,备注:函数正常返回一

9、个 OS_NO_ERR;特别注意,在归还内存块时,要用户确认归属无误!切勿张冠李戴!,西安邮电学院 计算机系,17,2018/7/7,6.2 动态内存的管理,将内存块归还制定分区 - OSMemPut( )举例:,OS_MEM *CommTxBuf;INT8U CommTxPart3080;INT8U err;INT8U *BlkPtr;void main (void) ; OSInit( ); ; CommTxBuf = OSMemCreate(CommTxPart,30,80,void MyTask(void *pdata) ; for (;) BlkPtr = OSMemGet(CommTxBuf, ,西安邮电学院 计算机系,18,2018/7/7,6.3 动态内存的管理-实例,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报