嵌入式实时操作系统μCOS原理与实践6.ppt
《嵌入式实时操作系统μCOS原理与实践6.ppt》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统μCOS原理与实践6.ppt(16页珍藏版)》请在三一文库上搜索。
1、嵌入式实时操作系统C/OS原理与实践,教材 :嵌入式实时操作系统C/OS原理与实践 电子工业出版社 作者:卢有亮 电子科技大学能源科学与工程学院,第6章 内存管理,6.1 内存管理数据结构 6.1.1内存控制块 6.1.2 内存控制块实体 6.1.3 空闲内存控制块链表 6.1.4 内存分区 6.2 内存控制块初始化 6.3 创建内存分区 6.4内存分区获取 6.5内存分区释放 6.6查询内存分区的状态 6.7内存管理实例 习题,嵌入式系统中,内存资源是十分宝贵的,如果采用内存分区方式不合理,经过一段时间的内存分配和释放、再发配和再释放,会产生很多零散的内存碎块。这些零散的空间很难利用,因此
2、怎样解决内存分配过程中产生的碎块问题是内存管理的关键问题。 C/OS-II中,采用分区的方式管理内存,即将连续的大块内存按分区来管理,每个系统中有数个这样的分区,每个分区又包含数个小相同的内存块。这样,在分配内存的时候,根据需要从不同的分区中得到数个内存块,而在释放时,这些内存块重新释放回他们原来所在的分区。这样就不会产生内存越分越凌乱,没有整块的连续分区的问题了。,6.1 内存管理数据结构,6.1.1内存控制块,6.1.2 内存控制块实体,OS_MEM OSMemTblOS_MAX_MEM_PART;,6.1.3 空闲内存控制块链表,OS_MEM *OSMemFreeList;,6.1.4
3、内存分区,内存分区与消息队列在一点上相似,就是必须由用户任务来创建。其实定义一个内存分区是相当简单的一件事情,其实就是一个二维数组。 如:INT32U MemBuf1020 MemBuf就可以是一个内存分区,该分区共有800个字节,分为10个内存块。使用MCB可以将该分区管理起来,实现动态分配和释放,6.2 内存控制块初始化,OS_MemClr 为了解析OS_MemInit函数,我们先需要了解一个内存清零函数OS_MemClr,该函数用于对指定内存中的数据进行清零操作。OS_MemClr最大只容许清除内存中64K字节的数据。用户不必担心产生清除数据量不满足要求的问题,因为这个功能的应用没有一个
4、能接近这个限制。这个功能在一个时间点只清除1个字节的数据,这是为了在任何处理器上移植该程序时都能对准内存位置。当然,如果确定了处理器类型,可以修改该函数,以提高代码效率。 OS_MemClr两个参数。第一个参数是指向8位无符号整数的指针pdest,表示将要被清零的内存的起始地址。第二个参数是16位的整型size,表示需要清零的内存大小。OS_MemClr这个函数很简单,将从pdest开始一个字节一个字节的将内存中的内容清0,直到清0了size个字节为止。 表6.3内存清零函数OS_MemClr解析,6.2 内存控制块初始化,表6.4内存初始化函数OS_MemInit()解析 可见OS_MemI
5、nit,对内存控制块MCB进行了初始化,构建了空闲MCB链表。但并未执行创建内存分区及分配内存的操作。,6.3 创建内存分区,内存分区在操作系统初始化的时候并不存在。在使用一个内存分区之前,必须先定义一个二维数组,但这个二维数组仍未成为内存分区。通过调用函数OSMemCreate,使用一个MCB对其进行管理,才成为一个内存分区。OSMemCreate返回一个指向内存控制块的指针,供内存管理的其他操作函数调用。 OSMemCreate有四个参数。第一个参数是addr,就是内存分区的首地址,即从哪里开始创建内存分区,应是作为分区的二维数组的首地址。第二个参数是nblks,表示需要创建的内存分区中内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实时 操作系统 COS 原理 实践
链接地址:https://www.31doc.com/p-3342640.html