1、 文档目标
解决RTX5 内存分配方式
2、 问题场景
使用 RTX5 进行内存分配方式选择。
3、软硬件环境
1 软件版本:Keil MDK 5.38a
2 电脑环境:Window 10
4、RTX5 内存分配的三种方式
RTX5为对象提供了三种不同的内存分配方法
1 Global Memory Pool(全局内存池)。全局内存池分配内存区域中的所有对象。这种内存分配方法是RTX5的默认配置。
图 1
在System Configuration中设置Global Dynamic Memory size;(RTX_Config.h)
当内存池没有提供足够的内存时,对象的创建将失败,相关的osObjectNew()函数将返回NULL。
2 Object-specific Memory Pools(特定对象的内存池)
特定对象的内存池通过为每个对象类型提供专用的固定大小内存管理来避免内存碎片。这种类型的内存池是完全时间确定的,这意味着对象的创建和销毁总是需要相同的固定时间。由于固定大小的内存池是特定于对象类型的,因此可以简化内存不足情况的处理。
图 2
为每种对象类型选择性地启用特定于对象的内存池,例如:使用RTX配置文件的互斥对象或线程:
1)在线程配置中为线程对象启用。
2)在计时器对象的计时器配置中启用。
3)在事件对象的事件标志配置中启用。
4)在互斥对象的互斥配置中启用。
5)在信号量的信号量配置中启用。
6)已在内存池的内存池配置中启用。
7)在消息队列配置中为消息对象启用。
当内存池没有提供足够的内存时,对象的创建将失败,相关的osObjectNew()函数将返回NULL。
3 Static Object Memory(静态对象内存)
与动态内存分配相反,静态内存分配需要在对象编译时分配内存。
图 3
静态内存分配可以通过在创建对象时使用属性提供用户定义的内存来实现。