网站首页 > 教程分享 正文
https://www.freertos.org/Static_Vs_Dynamic_Memory_Allocation.html
介绍
V9.0.0之前的FreeRTOS版本从特殊的FreeRTOS堆中分配下面列出的RTOS对象使用的内存。 FreeRTOS V9.0.0及更高版本使应用程序编写者可以自己提供内存,从而可以选择创建以下对象,而无需动态分配任何内存:
- Tasks
- Software Timers
- Queues
- Event Groups
- Binary Semaphores
- Counting Semaphores
- Recursive Semaphores
- Mutexes
使用静态还是动态内存分配是更可取的,取决于应用程序以及应用程序编写者的偏好。 两种方法都有优点和缺点,并且两种方法都可以在同一RTOS应用程序中使用。
位于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区域中拆分堆;或者应用程序编写者自己提供的一种分配方案。
如果
configSUPPORT_DYNAMIC_ALLOCATION设置为1或未定义,以下API函数将使用动态分配的RAM创建RTOS对象:
- xTaskCreate()
- xQueueCreate()
- xTimerCreate()
- xEventGroupCreate()
- xSemaphoreCreateBinary()
- xSemaphoreCreateCounting()
- xSemaphoreCreateMutex()
- xSemaphoreCreateRecursiveMutex()
使用静态分配的RAM创建RTOS对象
使用静态分配的RAM创建RTOS对象的好处是为应用程序编写器提供了更多控制权:
- 可以将RTOS对象放置在特定的内存位置。
- 可以在链接时而不是运行时确定最大的RAM占用空间。
- 应用程序编写者无需关心内存分配失败的适当处理。
- 它允许RTOS用于根本不允许任何动态内存分配的应用程序(尽管FreeRTOS包括可以克服大多数反对意见的分配方案)。
下列API函数(如果
configSUPPORT_STATIC_ALLOCATION设置为1时可用)允许使用应用程序编写器提供的内存创建RTOS对象。为了提供内存,应用程序编写者只需要声明一个适当对象类型的变量,然后将变量的地址传递给RTOS API函数即可。提供了StaticAllocation.c标准的演示/测试任务来演示如何使用这些功能:
- xTaskCreateStatic()
- xQueueCreateStatic()
- xTimerCreateStatic()
- xEventGroupCreateStatic()
- xSemaphoreCreateBinaryStatic()
- xSemaphoreCreateCountingStatic()
- xSemaphoreCreateMutexStatic()
- xSemaphoreCreateRecursiveMutexStatic()
- 上一篇: 详解SDL常用技术实战(1)(sdl用于)
- 下一篇: 5分钟学会C/C++多线程编程进程和线程
猜你喜欢
- 2025-04-10 嵌入式工程师竟然看不懂这些专业语句,那真别怪人说你菜
- 2025-04-10 学Spring源码这么久了,必须要掌握的bean实例的创建过程,安排
- 2025-04-10 一文带你看懂Golang最新特性(golang x)
- 2025-04-10 Linux C++实现多线程同步的四种方式(超级详细)
- 2025-04-10 Linux系统编程—条件变量(linux条件变量互斥锁)
- 2025-04-10 作为C++后端开发程序员,应该彻底理解Epoll实现原理
- 2025-04-10 zk基础—5.Curator的使用与剖析二
- 2025-04-10 C语言多线程编程指南(c语言的多线程编程)
- 2025-04-10 Goland pprof 火焰图(golang火焰图)
- 2025-04-10 RT-Thread快速入门-互斥量(实现互斥)
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)