MS-RTOS 内存池

更新时间:
2023-08-09
下载文档

MS-RTOS 内存池

本章将介绍 MS-RTOS 内存池的使用。

内存池相关数据类型

类型描述
ms_mempool_stat_t内存池的状态信息结构类型

ms_mempool_stat_t

内存池的状态信息结构类型:

typedef struct {
    ms_size_t free_count;
} ms_mempool_stat_t;
参数说明
free_count空闲内存块数目

内存池相关 API

下表展示了内存池相关的 API 在两个权限空间下是否可用:

API用户空间内核空间
ms_mempool_create
ms_mempool_destroy
ms_mempool_alloc
ms_mempool_tryalloc
ms_mempool_free
ms_mempool_stat

ms_mempool_create()

  • 描述 创建一个内存池

  • 函数原型

ms_err_t ms_mempool_create(const char *name, ms_ptr_t mem_base, ms_uint16_t n_blk, 
                             ms_size_t blk_size, ms_ipc_opt_t opt, 
                             ms_handle_t *mpoolid);
  • 参数
输入/输出参数描述
[in]name内存池的名字,不能为空指针
[in]mem_base内存基地址
[in]n_blk有多少个内存块
[in]blk_size每个内存块的大小
[in]opt内存池的选项
[out]mpoolid内存池的 ID,不能为空指针

opt 参数可以取如下的值:

含义
MS_WAIT_TYPE_PRIO按优先级高低规则等待
MS_WAIT_TYPE_FIFO按先来先服务规则等待
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用

  • 示例

static ms_handle_t mempool_id;

static ms_uint8_t mempool[10U * 1024U];

int main(int argc, char *argv[])
{
    ms_mempool_create("mempool", mempool, 10U, 1024U, MS_WAIT_TYPE_PRIO, &mempool_id);

    return 0;
}

ms_mempool_destroy()

  • 描述 销毁一个内存池

  • 函数原型

ms_err_t ms_mempool_destroy(ms_handle_t mpoolid);
  • 参数
输入/输出参数描述
[in]mpoolid内存池的 ID
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用

  • 示例

static ms_handle_t mempool_id;

static ms_uint8_t mempool[10U * 1024U];

int main(int argc, char *argv[])
{
    ms_mempool_create("mempool", mempool, 10U, 1024U, MS_WAIT_TYPE_PRIO, &mempool_id);

    // do some thing

    ms_mempool_destroy(mempool_id);

    return 0;
}

ms_mempool_alloc()

  • 描述 从内存池中分配一个内存块

  • 函数原型

ms_ptr_t ms_mempool_alloc(ms_handle_t mpoolid, ms_tick_t timeout, ms_err_t *perr);
  • 参数
输入/输出参数描述
[in]mpoolid内存池的 ID
[in]timeout等待的超时时间
[out]perrMS-RTOS 内核错误码,不关心时可以为 MS_NULL
  • 返回值 内存块指针,失败时返回 MS_NULL

  • 注意事项 中断中、内核锁定期间或内核启动前调用,timeout 必须为 MS_TIMEOUT_NO_WAIT

  • 示例

static ms_handle_t mempool_id;

static ms_uint8_t mempool[10U * 1024U];

int main(int argc, char *argv[])
{
    ms_ptr_t ptr;

    ms_mempool_create("mempool", mempool, 10U, 1024U, MS_WAIT_TYPE_PRIO, &mempool_id);

    ptr = ms_mempool_alloc(mempool_id, 1000U, MS_NULL);

    // do some thing

    ms_mempool_destroy(mempool_id);

    return 0;
}

ms_mempool_tryalloc()

  • 描述 从内存池中尝试分配一个内存块

  • 函数原型

ms_ptr_t ms_mempool_tryalloc(ms_handle_t mpoolid, ms_err_t *perr);
  • 参数
输入/输出参数描述
[in]mpoolid内存池的 ID
[out]perrMS-RTOS 内核错误码,不关心时可以为 MS_NULL
  • 返回值 内存块指针,失败时返回 MS_NULL

  • 注意事项

  • 示例

ms_mempool_free()

  • 描述 释放一个内存块到内存池

  • 函数原型

ms_err_t ms_mempool_free(ms_handle_t mpoolid, ms_ptr_t ptr);
  • 参数
输入/输出参数描述
[in]mpoolid内存池的 ID
[in]ptr内存块指针
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

static ms_handle_t mempool_id;

static ms_uint8_t mempool[10U * 1024U];

int main(int argc, char *argv[])
{
    ms_ptr_t ptr;

    ms_mempool_create("mempool", mempool, 10U, 1024U, MS_WAIT_TYPE_PRIO, &mempool_id);

    ptr = ms_mempool_alloc(mempool_id, 1000U, MS_NULL);

    // do some thing

    ms_mempool_free(mempool_id, ptr);

    ms_mempool_destroy(mempool_id);

    return 0;
}

ms_mempool_stat()

  • 描述 获得内存池的状态信息

  • 函数原型

ms_err_t ms_mempool_stat(ms_handle_t mpoolid, ms_mempool_stat_t *stat);
  • 参数
输入/输出参数描述
[in]mpoolid内存池的 ID
[out]stat内存池的状态信息
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

static ms_handle_t mempool_id;

static ms_uint8_t mempool[10U * 1024U];

int main(int argc, char *argv[])
{
    ms_mempool_stat_t stat;

    ms_mempool_create("mempool", mempool, 10U, 1024U, MS_WAIT_TYPE_PRIO, &mempool_id);

    // do some thing

    ms_mempool_stat(mempool_id, &stat);

    ms_mempool_destroy(mempool_id);

    return 0;
}
文档内容是否对您有所帮助?
有帮助
没帮助