FreeRTOS内存管理
FreeRTOS 内存管理模块管理用于系统中内存资源,它是操作系统的核心模块之一。主要包括内存的初始化、分配以及释放。
在嵌入式实时操作系统中,调用 malloc()和 free()却是危险的,原因有以下几点:
这些函数在小型嵌入式系统中并不总是可用的,小型嵌入式设备中的 RAM 不足。
它们的实现可能非常的大,占据了相当大的一块代码空间。
他们几乎都不是安全的。
它们并不是确定的,每次调用这些函数执行的时间可能都不一样
它们有可能产生碎片。
这两个函数会使得链接器配置得复杂
如果允许堆空间的生长方向覆盖其他变量占据的内存,它们会成为 debug 的灾难
在一般的实时嵌入式系统中,由于实时性的要求,很少使用虚拟内存机制。所有的内存都需要用户参与分配,直接操作物理内存,所分配的内存不能超过系统的物理内存,所有的系统堆栈的管理,都由用户自己管理。
同时,在嵌入式实时操作系统中,对内存的分配时间要求更为苛刻,分配内存的时间必须是确定的。一般内存管理算法是根据需要存储的数据的长度在内存中去寻找一个与这段数据相适应的空闲内存块,然后将数据存储在里面。而寻找这样一个空闲内存块所耗费的时间是不确定的,因此对于实时系统来说,这就是不可接受的,实时系统必须要保证内存块的分配过程在可预测的确定时间内完成,否则实时任务对外部事件的响应也将变得不可确定。
而在嵌入式系统中,内存是十分有限而且是十分珍贵的,用一块内存就少了一块内存,而在分配中随着内存不断被分配和释放,整个系统内存区域会产生越来越多的碎片,因为在使用过程中,申请了一些内存,其中一些释放了