MS-RTOS 内存堆

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

MS-RTOS 内存堆

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

内存堆相关 API

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

API用户空间内核空间
ms_kheap_sbrk
ms_kmalloc
ms_kzalloc
ms_kmalloc_align
ms_kfree
ms_krealloc
ms_kcalloc
ms_malloc
ms_zalloc
ms_malloc_align
ms_free
ms_realloc
ms_calloc

ms_kheap_sbrk()

  • 描述 给内核内存堆增加内存

  • 函数原型

ms_err_t ms_kheap_sbrk(ms_ptr_t base, ms_size_t size);
  • 参数
输入/输出参数描述
[in]base内存基地址,不能为空指针
[in]size内存大小,必须 >= 2048
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用,最多增加一个区域

  • 示例

static ms_uint8_t mem[4096U];

int xxx(void)
{
    ms_kheap_sbrk(mem, sizeof(mem));

    return 0;
}

ms_kmalloc()

  • 描述 从内核内存堆中分配指定大小的内存

  • 函数原型

ms_ptr_t ms_kmalloc(ms_size_t size);
  • 参数
输入/输出参数描述
[in]size需要分配的内存大小,必须 > 0
  • 返回值 内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int xxx(void)
{
    ms_ptr_t ptr = ms_kmalloc(100U);

    // do some thing

    return 0;
}

ms_kzalloc()

  • 描述 从内核内存堆中分配指定大小的内存并清零

  • 函数原型

ms_ptr_t ms_kzalloc(ms_size_t size);
  • 参数
输入/输出参数描述
[in]size需要分配的内存大小,必须 > 0
  • 返回值 内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int xxx(void)
{
    ms_ptr_t ptr = ms_kzalloc(100U);

    // do some thing

    return 0;
}

ms_kfree()

  • 描述 释放内存到内核内存堆

  • 函数原型

ms_ptr_t ms_kfree(ms_ptr_t ptr);
  • 参数
输入/输出参数描述
[in]ptr内存指针,不能为空指针
  • 返回值 成功返回 MS_NULL,失败返回 ptr

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int xxx(void)
{
    ms_ptr_t ptr = ms_kmalloc(100U);

    // do some thing

    ms_kfree(ptr);

    return 0;
}

ms_kmalloc_align()

  • 描述 从内核内存堆中分配指定大小指定对齐要求的内存

  • 函数原型

ms_ptr_t ms_kmalloc_align(ms_size_t size, ms_size_t align);
  • 参数
输入/输出参数描述
[in]size需要分配的内存大小,必须 > 0
[in]align需要对齐到多少个字节,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int xxx(void)
{
    ms_ptr_t ptr = ms_kmalloc_align(100U, 32U);

    // do some thing

    ms_kfree(ptr);

    return 0;
}

ms_krealloc()

  • 描述 从内核内存堆中重新分配指定大小的内存

  • 函数原型

ms_ptr_t ms_krealloc(ms_ptr_t ptr, ms_size_t size);
  • 参数
输入/输出参数描述
[in]ptr内存指针,空指针时未分配
[in]size需要分配的内存大小,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int xxx(void)
{
    ms_ptr_t ptr = ms_kmalloc(100U);

    // do some thing

    ptr = ms_krealloc(ptr, 200U);

    // do some thing

    ms_kfree(ptr);

    return 0;
}

ms_kcalloc()

  • 描述 从内核内存堆中分配 N 个指定大小的内存块,并清零

  • 函数原型

ms_ptr_t ms_kcalloc(ms_size_t n_blk, ms_size_t blk_size);
  • 参数
输入/输出参数描述
[in]n_blkN 个内存块,必须 > 0
[in]blk_size每个内存块的大小,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int xxx(void)
{
    ms_ptr_t ptr = ms_kcalloc(10U, 100U);

    // do some thing

    ms_kfree(ptr);

    return 0;
}

ms_malloc()

  • 描述 从内存堆中分配指定大小的内存

  • 函数原型

ms_ptr_t ms_malloc(ms_size_t size);
  • 参数
输入/输出参数描述
[in]size需要分配的内存大小,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int main(int argc, char *argv[])
{
    ms_ptr_t ptr = ms_malloc(100U);

    // do some thing

    return 0;
}

ms_zalloc()

  • 描述 从内存堆中分配指定大小的内存并清零

  • 函数原型

ms_ptr_t ms_zalloc(ms_size_t size);
  • 参数
输入/输出参数描述
[in]size需要分配的内存大小,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int main(int argc, char *argv[])
{
    ms_ptr_t ptr = ms_zalloc(100U);

    // do some thing

    return 0;
}

ms_free()

  • 描述 释放内存到内存堆

  • 函数原型

ms_ptr_t ms_free(ms_ptr_t ptr);
  • 参数
输入/输出参数描述
[in]ptr内存指针,必须不为空指针
  • 返回值 成功返回 MS_NULL,失败返回 ptr

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int main(int argc, char *argv[])
{
    ms_ptr_t ptr = ms_malloc(100U);

    // do some thing

    ms_free(ptr);

    return 0;
}

ms_malloc_align()

  • 描述 从内存堆中分配指定大小指定对齐要求的内存

  • 函数原型

ms_ptr_t ms_malloc_align(ms_size_t size, ms_size_t align);
  • 参数
输入/输出参数描述
[in]size需要分配的内存大小,必须 > 0
[in]align需要对齐到多少个字节,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int main(int argc, char *argv[])
{
    ms_ptr_t ptr = ms_malloc_align(100U, 32U);

    // do some thing

    ms_free(ptr);

    return 0;
}

ms_realloc()

  • 描述 从内存堆中重新分配指定大小的内存

  • 函数原型

ms_ptr_t ms_realloc(ms_ptr_t ptr, ms_size_t size);
  • 参数
输入/输出参数描述
[in]ptr内存指针,空指针时未分配
[in]size需要分配的内存大小,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int main(int argc, char *argv[])
{
    ms_ptr_t ptr = ms_malloc(100U);

    // do some thing

    ptr = ms_realloc(ptr, 200U);

    // do some thing

    ms_free(ptr);

    return 0;
}

ms_calloc()

  • 描述 从内存堆中分配 N 个指定大小的内存块,并清零

  • 函数原型

ms_ptr_t ms_calloc(ms_size_t n_blk, ms_size_t blk_size);
  • 参数
输入/输出参数描述
[in]n_blkN 个内存块,必须 > 0
[in]blk_size每个内存块的大小,必须 > 0
  • 返回值 成功返回内存指针,失败时返回 MS_NULL

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

int main(int argc, char *argv[])
{
    ms_ptr_t ptr = ms_calloc(10U, 100U);

    // do some thing

    ms_free(ptr);

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