0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:硬件工程师技术干货 作者:硬件工程师技术干 2023-09-11 15:32 次阅读

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 结构体中。

优点:

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

缺点:

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

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

    关注

    112

    文章

    16302

    浏览量

    177783
  • 内存管理
    +关注

    关注

    0

    文章

    168

    浏览量

    14132
  • ucos-ii
    +关注

    关注

    1

    文章

    11

    浏览量

    3593
收藏 人收藏

    评论

    相关推荐

    uC/OS-II简介

    知名的CPU 上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理内存
    发表于 10-08 09:11

    uC/OS-II简介

    知名的CPU 上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理内存
    发表于 10-11 09:26

    uC/OS-II简介

    知名的CPU 上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理内存
    发表于 10-15 11:03

    uC/OS-II简介

    知名的CPU 上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理内存
    发表于 10-20 09:35

    uC/OS-II简介

    知名的CPU 上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理内存
    发表于 10-25 09:59

    uC/OS-II简介

    知名的CPU 上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理内存
    发表于 10-27 09:29

    如何去解决uC/OS-II中优先级翻转问题?

    uC/OS-II的运行机制是什么?uC/OS-II中的优先级翻转问题有哪些?如何去解决uC/OS-II
    发表于 04-25 07:07

    uC/OS-II源码包的下载

    ☞ STM32F107——uC/OS-II 源码包的下载一、微内核 uC/OS-II 的构成实时微内核 uC/
    发表于 08-05 08:09

    uC/OS-II移植过程记录

    怎么去移植uC/OS-II系统呢?移植uC/OS-II系统的过程是怎样的?
    发表于 11-01 07:38

    为什么想学uc/OS-II

    请大家先想一下,为什么想学uc/OS-II?在通过例程学习单片机的时候有没有这样的疑问,为什么例程是一个个孤立的呢,能否整合在一起?RTOS就是这样一个多线程运行的好工具,我选取UCOS来实现
    发表于 02-18 07:16

    不受uc/os-ii管理的中断和受管理的中断是否具有相同的响应方式?

    不受 uc/os-ii 管理的中断和受管理的中断是否具有相同的响应方式,即不受管理的中断在中断 uc
    发表于 02-27 15:03

    The uC/OS-II port for Keil C V

    The uC/OS-II port for Keil C V6.20, V6.21 or higher
    发表于 03-25 14:18 57次下载

    基于uc/os-ii 的嵌入式GUI研究与应用

    目前,uc/os-ii 在嵌入式系统中得到了广泛的应用,但适用于uc/os-ii 的图形界面却很少。本文介绍了一种适用于uc/
    发表于 08-24 08:17 21次下载

    uC/OS-II—邮箱介绍

    uC/OS-II中邮箱是线程(任务)通讯的一种,使用邮箱能够发送一个指针,当然也可以发送指针大小的数据。
    的头像 发表于 09-11 15:35 1105次阅读

    优化MSP430上用于uC/OS-II内存

    电子发烧友网站提供《优化MSP430上用于uC/OS-II内存.pdf》资料免费下载
    发表于 10-18 10:16 0次下载
    优化MSP430上用于<b class='flag-5'>uC</b>/<b class='flag-5'>OS-II</b>的<b class='flag-5'>内存</b>