静态内存池主文件 更多...
函数 | |
LITE_OS_SEC_BSS | SPIN_LOCK_INIT (g_memboxSpin) |
STATIC INLINE UINT32 | OsCheckBoxMem (const LOS_MEMBOX_INFO *boxInfo, const VOID *node) |
检查静态内存块 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_MemboxInit (VOID *pool, UINT32 poolSize, UINT32 blkSize) |
初始化一个静态内存池,根据入参设定其起始地址、总大小及每个内存块大小 更多... | |
LITE_OS_SEC_TEXT VOID * | LOS_MemboxAlloc (VOID *pool) |
从指定的静态内存池中申请一块静态内存块,整个内核源码只有 OsSwtmrScan中用到了静态内存. 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_MemboxFree (VOID *pool, VOID *box) |
释放指定的一块静态内存块 更多... | |
LITE_OS_SEC_TEXT_MINOR VOID | LOS_MemboxClr (VOID *pool, VOID *box) |
清零指定静态内存块的内容 更多... | |
LITE_OS_SEC_TEXT_MINOR VOID | LOS_ShowBox (VOID *pool) |
show membox info. 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_MemboxStatisticsGet (const VOID *boxMem, UINT32 *maxBlk, UINT32 *blkCnt, UINT32 *blkSize) |
获取指定静态内存池的信息,包括内存池中总内存块数量、已经分配出去的内存块数量、每个内存块的大小 更多... | |
静态内存池主文件
使用场景 当用户需要使用固定长度的内存时,可以通过静态内存分配的方式获取内存,一旦使用完毕, 通过静态内存释放函数归还所占用内存,使之可以重复使用。 开发流程 通过make menuconfig配置静态内存管理模块。 规划一片内存区域作为静态内存池。 调用LOS_MemboxInit初始化静态内存池。 初始化会将入参指定的内存区域分割为N块(N值取决于静态内存总大小和块大小),将所有内存块挂到空闲链表,在内存起始处放置控制头。 调用LOS_MemboxAlloc接口分配静态内存。 系统将会从空闲链表中获取第一个空闲块,并返回该内存块的起始地址。 调用LOS_MemboxClr接口。将入参地址对应的内存块清零。 调用LOS_MemboxFree接口。将该内存块加入空闲链表。 注意事项 静态内存池区域,如果是通过动态内存分配方式获得的,在不需要静态内存池时, 需要释放该段内存,避免发生内存泄露。 静态内存不常用,因为需要使用者去确保不会超出使用范围
在文件 los_membox.c 中定义.
STATIC INLINE UINT32 OsCheckBoxMem | ( | const LOS_MEMBOX_INFO * | boxInfo, |
const VOID * | node | ||
) |
LITE_OS_SEC_BSS SPIN_LOCK_INIT | ( | g_memboxSpin | ) |