最近我写了一个用于Microblaze的C-Application,我使用了uC / OS-II。 uC / OS-II提供内存池来分配和释放固定大小的内存块。我现在正在为STM32写一个C-Application,我这次使用的是FreeRTOS。似乎FreeRTOS没有提供相同的机制或者我错过了什么?我认为五个堆实现不是我想要的。
如果实际上没有内存池,有什么具体原因吗?
答案 0 :(得分:0)
FreeRTOS的原始版本使用了内存池。然而,发现用户努力确定池的维度,这导致了持续的支持请求流。此外,由于FreeRTOS的原始版本适用于RAM受限的系统,因此发现使用超大型池浪费的RAM是不可接受的。因此决定将存储器分配移动到便携式层,理解是没有一种方案适用于多于一部分应用,并且允许用户提供他们自己的方案。正如您所提到的,there are five example implementations provided几乎涵盖了所有应用程序,但如果您绝对必须使用内存池实现,那么您可以通过提供自己的pvPortMalloc()和vPortFree()实现(内存池为一个)轻松添加它更容易实现的。)
另请注意,在FreeRTOS V9中,您不需要任何内存分配方案,因为可以静态分配所有内容。