FreeRTOS——静态与动态内存分配
介绍
【FreeRTOS——静态与动态内存分配】V9.0.0之前的FreeRTOS版本从特殊的FreeRTOS堆中分配下面列出的RTOS对象使用的内存 。FreeRTOS V9.0.0及更高版本使应用程序编写者可以自己提供内存 , 从而可以选择创建以下对象 , 而无需动态分配任何内存:
- Tasks
- Software Timers
- Queues
- Event Groups
- Binary Semaphores
- Counting Semaphores
- Recursive Semaphores
- Mutexes
位于FreeRTOS主下载目录的FreeRTOS / Source / WIN32-MSVC-Static-Allocation-Only目录中的简单Win32示例演示了如何创建FreeRTOS应用程序而无需在项目中包含任何FreeRTOS堆实现 。
使用动态分配的RAM创建RTOS对象
动态创建RTOS对象的好处是更加简单 , 并有可能最大程度地减少应用程序的最大RAM使用量:
- 创建对象时 , 需要较少的功能参数 。
- 内存分配在RTOS API函数内自动进行 。
- 应用程序编写者不必自己担心分配内存 。
- 如果删除了RTOS对象使用的RAM , 则可以重新使用该对象 , 从而有可能减少应用程序的最大RAM占用空间 。
- 提供RTOS API函数以返回有关堆使用情况的信息 , 从而可以优化堆大小 。
- 可以选择使用的内存分配方案来最佳地适合应用程序 , 例如 , 对于安全性至关重要的应用程序来说 , heap_1.c为简化和确定性通常是必需的;heap_4.c为碎片保护; heap_5.c在多个RAM区域中拆分堆;或者应用程序编写者自己提供的一种分配方案 。
- xTaskCreate()
- xQueueCreate()
- xTimerCreate()
- xEventGroupCreate()
- xSemaphoreCreateBinary()
- xSemaphoreCreateCounting()
- xSemaphoreCreateMutex()
- xSemaphoreCreateRecursiveMutex()
使用静态分配的RAM创建RTOS对象的好处是为应用程序编写器提供了更多控制权:
- 可以将RTOS对象放置在特定的内存位置 。
- 可以在链接时而不是运行时确定最大的RAM占用空间 。
- 应用程序编写者无需关心内存分配失败的适当处理 。
- 它允许RTOS用于根本不允许任何动态内存分配的应用程序(尽管FreeRTOS包括可以克服大多数反对意见的分配方案) 。
- xTaskCreateStatic()
- xQueueCreateStatic()
- xTimerCreateStatic()
- xEventGroupCreateStatic()
- xSemaphoreCreateBinaryStatic()
- xSemaphoreCreateCountingStatic()
- xSemaphoreCreateMutexStatic()
- xSemaphoreCreateRecursiveMutexStatic()
推荐阅读
- 动态降噪+双设备连接,华为FreeBuds Pro上手评
- FlinkSQL 动态加载 UDF 实现思路
- 算法萌新如何学好动态规划(3)
- 大神已提取出一加8T的动态壁纸:Android 8.0+设备均可使用
- 关于边缘计算与网络动态加速
- 明年济南将新建1.7万个充电桩,还将打造静态交通云平台
- PS5系统更新带来动态调整游戏机的风扇速度特性 以提升散热
- “会员配送费更贵”,美团外卖回应了
- Google Photos丰富Memories功能:新增循环显示图片的动态壁纸功能
- VS2019静态分析工具:C++ Core Check