UCOSii(五)——内存管理

一、前言

在嵌入式系统中,时常会面临Ram受限的情况。所以用C lib里的,malloc()和 free()来申请和释放内存时,频繁的内存请求造成的内存碎片会对系统性能造成负面影响。Ucos的解决办法是为内存划分不同大小的内存区域,每个区域内有一定数量、相同大小的内存块。每次申请内存都必须要以一个内存块为单位,释放内存块时,该内存块会回到相应的内存分区。这样,确实,内存的碎片的问题得到了一定程度的解决。

然而,这意味着内存管理对编码的人来说,是不透明的。牺牲灵活性的代价就是用户必须提前根据自己的实际需要,把空闲内存划分成不同的内存分区,再把内存分区切割成几个相同大小的内存块。即使是在系统运行过程中的动态内存请求,编码的人也要提前为自己不同的任务分配内存区域和内存块。UCOS的使用者必须纵观整个项目,构建出最合适的memory map,才能高效使用ram资源。

这里写图片描述

二、内存控制块

MCB用来定义一个内存区域的属性。这种有点类似面向对象的控制结构在UCOSii里很常见,只要在Tcb、Ecb和Mcb这样的控制块中,加入一些方法,这个控制块瞬间就变成了一个类。只是出于实时性的需要,RTOS一般使用效率更高的结构性语言而经常与高级语言无缘,但UCOSii作者的设计思想依然很值得我们借鉴。

MCB原型:

typedef struct {
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值