我们启动了一个新软件,并考虑使用 MPU。我们的新软件基于 FreeRTOS(带有 MPU 端口)。
我们正确理解了关于与 MPU 的任务间通信的所有分段。我们遇到的困难是如何处理动态分配保护。默认情况下,所有内存都应该在用户模式下受到保护。是否有任何在线文档解释我们应该如何处理动态分配?
我们希望尽可能多地保护内存,因为我们将设计一个 > 500K 编译代码的大型软件。
问候
乔纳森
基本上 FreeRTOS 提供了 4 种不同的内存分配策略,在目录中的heap_1.c
, heap_2.c
... 文件中实现portable/MemMang
。
heap_1.c
提供一个简单的 alloc only 实现
heap_2.c
提供一个简单的 alloc/free 实现
其他 2 个实现更高级的 alloc/free 策略。FreeRTOS 将需要您至少选择其中一个,因为它需要此接口来进行自己的资源分配(任务、互斥体、信号量等)。对于提供内存保护单元的MCU,FreeRTOS也有相应的支持。
请注意,使用 MPU 将强制您使用最小块大小(例如 1KB)分配内存。如果您需要分配大量小对象(例如使用 astd::list<int>
或std::map<int,int>
带有许多元素),这可能会非常昂贵。您可能会考虑为此类情况提供自己的专用分配器。