
# 开发指导
#### 使用场景
当用户需要使用固定长度的内存时，可以通过静态内存分配的方式获取内存，一旦使用完毕，通过静态内存释放函数归还所占用内存，使之可以重复使用。
#### 功能
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 |
      
   

2. 规划一片内存区域作为静态内存池。
3. 调用LOS_MemboxInit初始化静态内存池。 初始化会将入参指定的内存区域分割为N块（N值取决于静态内存总大小和块大小），将所有内存块挂到空闲链表，在内存起始处放置控制头。
   
4. 调用LOS_MemboxAlloc接口分配静态内存。 系统将会从空闲链表中获取第一个空闲块，并返回该内存块的起始地址。
   
5. 调用LOS_MemboxClr接口。 将入参地址对应的内存块清零。
   
6. 调用LOS_MemboxFree接口。 将该内存块加入空闲链表。
   
 
#### 平台差异性
无。
