下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

静态内存分配 vs 动态内存分配

简介

V9.0.0 之前的 FreeRTOS 版本分配下列 RTOS象所使用的内存 (这些对象是从特殊 FreeRTOS 堆中分配的)。 FreeRTOS V9.0.0及更高版本使应用程序写入器能够提供 内存本身,从而可以选择创建下列对象,而无需 动态分配任何存储器:
  • 任务
  • 软件定时器
  • 队列
  • 事件组
  • 二进制信号量
  • 计数信号量
  • 递归信号量
  • 互斥锁
使用静态内存分配更好或动态内存分配更好取决于 应用程序以及应用程序写入器的偏好。 两种方法 各有优点和缺点,两种方法都可以在同一 RTOS 应用程序中使用。

简单的 Win32 示例 位于 FreeRTOS/Source/WIN32-MSVC-Static-Allocation-Only (FreeRTOS 主下载目录)演示了 FreeRTOS 应用程序 如何可以无需在项目中实现任何 FreeRTOS 堆 即可被创建。


创建使用动态分配 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 对象 :


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

使用静态分配的 RTOS 创建 RAM 对象 可为应用程序写入器提供更好的控制力:
  • RTOS 对象可以放置在特定的内存位置。

  • 最大 RAM 占用可以在链接时间确定,而不是 运行时间。

  • 应用程序写入器可以很好地 处理内存分配故障。

  • 它允许在应用程序中使用 RTOS, 这类应用程序不允许任何动态内存分配(尽管 FreeRTOS 包含 可以克服大多数异议的分配方案)。

如果满足以下条件,则以下 API 函数可用: configSUPPORT_STATIC_ALLOCATION 设置为 1 ,允许使用应用程序写入器提供的内存创建 RTOS 对象 。 为应用程序编写者提供内存 只需声明适当对象类型的变量,然后将该变量的地址传递到 RTOS API 函数。 提供了 StaticAllocation.c 的 标准演示/测试任务以演示如何使用该函数:






Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.