0

我们启动了一个新软件,并考虑使用 MPU。我们的新软件基于 FreeRTOS(带有 MPU 端口)。

我们正确理解了关于与 MPU 的任务间通信的所有分段。我们遇到的困难是如何处理动态分配保护。默认情况下,所有内存都应该在用户模式下受到保护。是否有任何在线文档解释我们应该如何处理动态分配?

我们希望尽可能多地保护内存,因为我们将设计一个 > 500K 编译代码的大型软件。

问候

乔纳森

4

1 回答 1

0

基本上 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>带有许多元素),这可能会非常昂贵。您可能会考虑为此类情况提供自己的专用分配器。

于 2013-11-12T13:25:26.370 回答