uC/OS-II内存管理方法详解

电子说

1.3w人已加入

描述

ucos内存管理方法十分小巧,实时性好,非常值得借鉴。大致原理如下:

ucos把内存初始化成相同大小的内存块,使用单向链表的方式连接起来,使用时从链表摘下,释放时重新插入链表。

当然可以存在多条链表,根据用户需求配置,同一个链表内内存块是相同大小的。比如,以100或200字节为内存块的内存链表。

每条内存链表使用一个结构体(OS_MEM)控制,这个结构体描述了这一条链表中的内存属性,比如内存块大小,剩余内存块的数量,内存块总数量等等。

内存管理

1、

内存管理

此函数由系统内部调用,用户不必理会,主要是一些初始化动作,前面说了每条链表都有一个结构体OS_MEM控制。

ucos建立了一个OS_MEM结构体数组,这个函数就是把这个结构体数组成员使用单向链表连接起来,并且对结构体进行初始化。

ucos使用一个全局指针指向表头,方便结构体取用。每一个结构体都可以控制一个内存链表。结构体数量用户可以通过宏定义配置。

2、

内存管理

此函数初始化并创建内存块链表。主要过程是从结构体链表中取下一个空闲结构体。根据参数提供的内存起始地址和内存块大小,把整个内存分为大小一致的内存块,使用单向链表连接起来。

再把内存块链表的属性信息填写到结构体中。此函数返回一个结构体指针。找到这个结构体就找到了这条链表。

3、

内存管理

根据OS_MEM类型指针找到对应的链表结构体,如果空闲的内存块数量大于0,那么从链表中摘下一个内存块,然后修改OS_MEM结构体信息,返回内存首地址。

4、

内存管理

这个简单,获得内存块链表的名称。

5、

内存管理

这个简单,设置内存块链表的名称。

6、

内存管理

释放内存,把用完的内存块,插入pmem对应的链表中,然后修改pmem结构体信息。

7、

内存管理

查询指定的内存链表中的内存使用情况,查询结果放在OS_MEM_DATA 结构体中。

优点:

仔细阅读源码就会发现,每次取出内存块的时间是一样的,速度非常快,放入内存块消耗的时间也是一样,运行时间可控,实时性非常好,代码量很小。

缺点:

每条链表中的内存块都是一样大小,使用时会有些浪费。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分