请选择 进入手机版 | 继续访问电脑版
快捷导航
本帖最后由 袁绪蝶 于 2017-12-22 18:57 编辑

一、内存管理
1 malloc()和free()

malloc()和free()
内存碎片
malloc()和free()两个函数动态地分配内存和释放内存。
但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。
由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。
分配时间不确定
由于内存管理算法的原因,malloc()和free()函数执行时间是不确定的。

2 μC/OS-II内存管理

——多个内存分区
在μC/OS-II中,操作系统把连续的大块内存按分区来管理,在一个系统中可以有多个内存分区;
——分区中多个内存块
每个分区中包含有整数个大小相同的内存块。


μC/OS-II内存管理优势:
——解决了分配时间不固定问题
μC/OS-II 对malloc()和free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。这样一来,malloc()和free()函数的执行时间也是固定的了。
——解决了内存碎片问题
用户的应用程序就可以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须重新放回它以前所属于的内存分区。显然,采用这样的内存管理算法,上面的内存碎片问题就得到了解决。

3 内存控制块
在μC/OS-II中使用内存控制块(memory control blocks)的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。
(上图中每一个红色框框里都有一个内存控制块)
内存控制块数组和链表
——μC/OS-II 在启动时就会对内存管理器进行初始化[由OSInit()调用OSMemInit()实现]。该初始化主要建立一个内存控制块链表;
——常数OS_MAX_MEM_PART定义了最大的内存分区数,该常数值至少应为2。

4 建立一个内存分区

OSMemCreate()
在使用一个内存分区之前,必须先建立该内存分区。
4个参数:
内存分区的起始地址、
分区内的内存块总块数、
每个内存块的字节数
一个指向错误信息代码的指针。
内存分区的最小值
每个内存分区必须含有至少两个内存块;(红框框里至少有两个绿框框)
每个内存块至少为一个指针的大小,因为同一分区中的所有空闲内存块是由指针串联起来的。

内存控制块及对应的内存分区和分区内的内存块之间的关系

在程序运行期间,经过多次的内存分配和释放后,同一分区内的各内存块之间的链接顺序会发生很大的变化。(可以理解为指针发生变化吗?)

5 分配一个内存块

OSMemGet()
应用程序可以调用OSMemGet()函数从已经建立的内存分区中申请一个内存块。(红框框里申请一个绿框框)
输入参数:内存控制块指针;
返回参数:返回指向被分配内存块的指针。

6 释放一个内存块

(释放的是绿框框)
OSMemPut()
当用户应用程序不再使用一个内存块时,必须及时地把它释放并放回到相应的内存分区中。
OSMemPut()的输入参数:内存控制块地址和内存块地址必须要匹配,否则容易造成系统崩溃。

7 查询一个内存分区的状态

(查看的是红框框)
OSMemQuery()
可以知道特定内存分区中内存块的大小、可用内存块数和正在使用的内存块数等信息。
信息都放在一个叫OS_MEM_DATA的数据结构中。

******************************************************
二、内存分区的应用
1 使用内存分区

内存分区使用举例
第一个任务
读取并检查模拟输入量的值(如气压、温度、电压等),如果其超过了一定的阈值,就申请内存块,向第二个任务发送一个消息。该消息中含有时间信息、出错的通道号和错误代码等可以想象的任何可能的信息。
第二个任务
错误处理程序是该例子的中心。收到消息后,执行出错处理后,释放内存块。任何任务、中断服务子程序都可以向该任务发送出错消息。错误处理程序则负责在显示设备上显示出错信息,在磁盘上登记出错记录,或者启动另一个任务对错误进行纠正等。

2 等待一个内存块

等待一个内存块
有时候,在内存分区暂时没有可用的空闲内存块的情况下,需要让一个申请内存块的任务等待。
μC/OS-II本身在内存管理上并不支持这项功能。如果确实需要,则可以通过为特定内存分区增加信号量的方法,实现这种功能。
应用程序为了申请分配内存块,首先要得到一个相应的信号量,然后才能调用OSMemGet()函数。

内存分区和信号量适用情况:
如果系统中只有一个任务使用动态内存块,就没有必要使用信号量了。这种情况不需要保证内存资源的互斥。
除非我们要实现多任务共享内存,否则连内存分区都不需要。







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.

共 0 个关于本帖的回复 最后回复于 2017-12-22 16:09

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2019-4-25 22:16