我们开始使用新软件,我们考虑使用MPU。我们将我们的新软件基于FreeRTOS(带有MPU端口)。
我们正确理解了与MPU进行任务间通信的所有细分。我们遇到的困难是如何处理动态分配保护。默认情况下,所有ram都应在用户模式下进行保护。是否有在线文档解释我们应如何处理动态分配?
我们希望尽可能多地保护内存,因为我们将设计一个大软件> 500K编译代码。
此致
乔纳森
答案 0 :(得分: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也具有适当的support。
请注意,使用MPU会强制您使用最小块大小(例如1KB)分配内存。如果您需要分配大量小对象(例如,使用包含许多元素的std::list<int>
或std::map<int,int>
),这可能会非常昂贵。您可以考虑为此类情况提供您自己的专用分配器。