更新时间:2021-07-08 GMT+08:00
分享

开发指导

使用场景

当用户需要使用固定长度的内存时,可以通过静态内存分配的方式获取内存,一旦使用完毕,通过静态内存释放函数归还所占用内存,使之可以重复使用。

功能

Huawei LiteOS的静态内存管理主要为用户提供以下功能,接口详细信息可以查看API参考。

功能分类

接口名

描述

初始化静态内存池

LOS_MemboxInit

初始化一个静态内存池,根据入参设定其起始地址、总大小及每个内存块大小

清除静态内存块内容

LOS_MemboxClr

清零指定静态内存块的内容

申请、释放静态内存

LOS_MemboxAlloc

从指定的静态内存池中申请一块静态内存块

LOS_MemboxFree

释放指定的一块静态内存块

获取、打印静态内存池信息

LOS_MemboxStatisticsGet

获取指定静态内存池的信息,包括内存池中总内存块数量、已经分配出去的内存块数量、每个内存块的大小

LOS_ShowBox

打印指定静态内存池所有节点信息(打印等级是LOS_INFO_LEVEL),包括内存池起始地址、内存块大小、总内存块数量、每个空闲内存块的起始地址、所有内存块的起始地址

开发流程

本节介绍使用静态内存的典型场景开发流程。

  1. 执行make menuconfig命令,进入Kernel ---> Memory Management菜单,完成静态内存管理模块的配置。

    配置项

    含义

    取值范围

    默认值

    依赖

    LOSCFG_KERNEL_MEMBOX

    使能membox内存管理

    YES/NO

    YES

    LOSCFG_KERNEL_MEMBOX_STATIC

    选择静态内存方式实现membox

    YES/NO

    YES

    LOSCFG_KERNEL_MEMBOX

    LOSCFG_KERNEL_MEMBOX_DYNAMIC

    选择动态内存方式实现membox

    YES/NO

    NO

    LOSCFG_KERNEL_MEMBOX

  1. 规划一片内存区域作为静态内存池。
  2. 调用LOS_MemboxInit初始化静态内存池。

    初始化会将入参指定的内存区域分割为N块(N值取决于静态内存总大小和块大小),将所有内存块挂到空闲链表,在内存起始处放置控制头。

  3. 调用LOS_MemboxAlloc接口分配静态内存。

    系统将会从空闲链表中获取第一个空闲块,并返回该内存块的起始地址。

  4. 调用LOS_MemboxClr接口。

    将入参地址对应的内存块清零。

  5. 调用LOS_MemboxFree接口。

    将该内存块加入空闲链表。

平台差异性

无。

相关文档