当前位置 : 主页 > 编程语言 > java >

【LiteOS】第 5 章

来源:互联网 收集:自由互联 发布时间:2022-06-23
文章目录 ​​静态内存管理​​ ​​开发配置​​ ​​注意事项​​ ​​LiteOS_华为云​​ 静态内存管理:在静态内存池中分配用户初始化时预设的固定大小的内存块; 分配和释放效


文章目录

  • ​​静态内存管理​​
  • ​​开发配置​​
  • ​​注意事项​​
  • ​​LiteOS_华为云​​

静态内存管理:在静态内存池中分配用户初始化时预设的固定大小的内存块;

  • 分配和释放效率高,静态内存池中无碎片?;
  • 只能申请到预设大小的内存块,不能按需申请;

静态内存管理

实质是一个静态数组,静态内存池内的块大小在初始化时设定,初始化后块大小不可变更。静态内存池有一个控制块和若干相同大小的内存块构成。

【LiteOS】第 5 章_内存管理

功能

接口名

描述

初始化静态内存

LOS_MemboxInit

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

清除静态内存块内容

LOS_MemboxClr

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

申请、释放静态内存

LOS_MemboxAlloc

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

申请、释放静态内存

LOS_MemboxFree

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

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

LOS_MemboxStatisticsGet

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

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

LOS_ShowBox

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

typedef struct
{
UINT32 uwBlkSize; /* 内存块的大小 */
UINT32 uwBlkNum; /* 内存块总数 */
UINT32 uwBlkCnt; /* 已经分配使用的块数 */
LOS_MEMBOX_NODE stFreeList; /* 内存控制块的空闲链表,指针指向下一个可用的内存块 */
} LOS_MEMBOX_INFO;

UINT32 LOS_MemboxInit(VOID *pBoxMem, /* 内存池地址,需要用户自定义 */
UINT32 uwBoxSize, /* 内存池大小 */
UINT32 uwBlkSize); /* 内存块大小 */

VOID LOS_MemboxClr(VOID *pBoxMem, /* 内存池地址 */
VOID *pBox) /* 需要释放的内存块 */


VOID *LOS_MemboxAlloc(VOID *pBoxMem) /* 指向内存池的指针 */

UINT32 LOS_MemboxFree(VOID *pBoxMem, /* 内存池地址 */
VOID *pBox) /* 需要释放的内存块 */

开发配置

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

  • 规划一片内存区域作为静态内存池;
  • ​​LOS_MemboxInit​​ 初始化静态内存池(内存池大小、内存块大小),将所有内存挂到空闲链表,在内存起始处放置控制头;
  • ​​LOS_MemboxAlloc​​ 分配静态内存,系统将从空闲链表中取第一个空闲块,并返回该内存块的起始地址;
  • ​​LOS_MemboxClr​​ 将入参地址对应的内存块清零;
  • ​​LOS_MemboxFree​​ 将内存块加入空闲链表;

注意事项


网友评论