【发布时间】:2019-11-23 09:29:01
【问题描述】:
我正在努力理解 FreeRTOS 中的内存管理概念,如果有人能证实我对事物的理解,我将不胜感激
我有一个 Zynq 7000 设备,我在 SoC 的 FPGA 端实现了一些自定义逻辑和 AXI DMA 控制器。该逻辑本质上会生成一些数据样本,然后将其写入 DDR 存储器。在处理器方面,我设置了 FreeRTOS (v10),它必须将数据写入 DDR 并对此进行一些处理。
现在,使用 AXI DMA 意味着我必须在 DDR 中为可写入样本的 DMA 控制器指定一些内存区域。在我的裸机应用程序中,这相对容易,因为我基本上可以在 DDR 中指定系统未保留的任何区域(我可以从内存映射中看到)。关于 FreeRTOS,这并不容易,因为很明显,FreeRTOS 已经为它的堆保留了部分内存,我不知道哪些内存区域可以免费使用,哪些不是。
那么我怎么知道哪些内存区域仍未分配并且可以免费使用?或者我可以(并且应该)使用 pvPortMalloc() 首先分配一些内存,然后用于我的 DMA 事务?在我的应用程序代码中使用 pvPortMalloc() 是否安全?另外,pvPortMalloc() 函数是从 FreeRTOS 堆中还是从 DDR 上的整个可用内存中分配内存?
【问题讨论】:
标签: memory heap-memory freertos zynq