FreeRTOS——静态与动态内存分配

FreeRTOS 基础系列文章

 基本对象
  FreeRTOS——任务
  FreeRTOS——队列
  FreeRTOS——信号量
  FreeRTOS——互斥量
  FreeRTOS——任务通知
  FreeRTOS——流和消息缓冲区
  FreeRTOS——软件定时器
  FreeRTOS——事件组

 内存管理
  FreeRTOS——静态与动态内存分配
  FreeRTOS——堆内存管理
  FreeRTOS——栈溢出保护

 代码组织
  FreeRTOS——源代码组织
  FreeRTOS——创建新的项目
  FreeRTOS——配置文件


概述

V9.0.0 之前的 FreeRTOS 版本从特殊的 FreeRTOS 堆分配下面列出的 RTOS 对象使用的内存。FreeRTOS V9.0.0及以上版本提供了应用程序设计者自己提供内存的能力,允许可选地创建以下对象而不需要动态分配内存:

  • 任务
  • 软件计时器
  • 队列
  • 事件组
  • 二进制信号量
  • 计数信号量
  • 互斥量
  • 递归互斥量

使用静态内存分配还是动态内存分配更好,这取决于应用程序,以及应用程序设计者的偏好。这两种方法各有优缺点,并且可以在同一个RTOS应用程序中使用这两种方法。


使用动态分配的 RAM 创建 RTOS 对象

动态创建 RTOS 对象的好处是更加简单,并且有可能最大限度地减少应用程序的最大 RAM 使用量:

  • 创建对象时需要的函数参数较少
  • 内存分配在 RTOS API 函数内自动发生。
  • 应用程序设计者不需要关心内存分配问题。
  • 如果对象被删除,RTOS 对象使用的 RAM 可以重新使用,这可能会减少应用程序的最大 RAM 占用空间。
  • 提供了 RTOS API 函数来返回有关堆使用情况的信息,从而可以优化堆大小。
  • 可以选择最适合应用程序的内存分配方案,heap_1.c 用于安全关键应用程序通常需要的简单性和确定性,heap_4.c 用于碎片维护,heap_5.c 用于将堆拆分到多个 RAM 区域,或者由应用程序设计者自己提供分配方案。

以下 API 函数在configSUPPORT_DYNAMIC_ALLOCATION设置为 1 或未定义时可用 ,使用动态分配的 RAM 创建 RTOS 对象:

  • xTaskCreate()
  • xTimerCreate()
  • xQueueCreate()
  • xEventGroupCreate()
  • xSemaphoreCreateBinary()
  • xSemaphoreCreateCounting()
  • xSemaphoreCreateMutex()
  • xSemaphoreCreateRecursiveMutex()

使用静态分配的 RAM 创建 RTOS 对象

使用静态分配的 RAM 创建 RTOS 对象的好处是为应用程序设计者提供更多控制权:

  • RTOS 对象可以放置在特定的内存位置。
  • 最大 RAM 占用空间可以在链接时确定,而不是在运行时确定。
  • 应用程序设计者不需要关心如何优雅地处理内存分配失败。
  • 它允许在不允许任何动态内存分配的应用程序中使用RTOS(尽管FreeRTOS的分配方案可以克服大多数反对意见)。

以下 API 函数在configSUPPORT_STATIC_ALLOCATION设置为 1 时可用 ,允许使用应用程序设计者提供的内存创建 RTOS 对象。为了提供内存,应用程序设计者只需声明一个适当对象类型的变量,然后将变量的地址传递给 RTOS API 函数:

  • xTaskCreateStatic()
  • xQueueCreateStatic()
  • xTimerCreateStatic()
  • xEventGroupCreateStatic()
  • xSemaphoreCreateBinaryStatic()
  • xSemaphoreCreateCountingStatic()
  • xSemaphoreCreateMutexStatic()
  • xSemaphoreCreateRecursiveMutexStatic()
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值