Я изо всех сил пытаюсь понять концепцию управления памятью в FreeRTOS и был бы признателен, если бы кто-нибудь подтвердил мое понимание вещей.
У меня есть устройство Zynq 7000, в котором я реализовал некоторую пользовательскую логику и контроллер AXI DMA на стороне FPGA SoC. Эта логика по существу генерирует некоторые выборки данных, которые затем записываются в память DDR. Что касается процессора, у меня установлена FreeRTOS (v10), которая должна принимать эти данные, записанные в DDR, и выполнять некоторую обработку.
Теперь использование AXI DMA означает, что я должен указать некоторую область памяти в DDR для контроллера DMA, куда могут быть записаны сэмплы. В моем baremetal-приложении это было относительно просто, так как я мог указать любой регион в DDR, который не был зарезервирован системой (что я мог видеть на карте памяти). Что касается FreeRTOS, это не так просто, потому что, очевидно, FreeRTOS зарезервировала часть этой памяти для своей кучи, и я не знаю, какие области памяти можно использовать, а какие нет.
Итак, как мне узнать, какие области памяти все еще не распределены и свободны для использования? Или я могу (и должен) использовать pvPortMalloc(), чтобы сначала выделить часть памяти, которую я затем буду использовать для своих транзакций DMA? Безопасно ли использовать pvPortMalloc() в коде моего приложения? Кроме того, функция pvPortMalloc() выделяет мне память в куче FreeRTOS или из всей доступной памяти в DDR?