У нас есть проект на работе, так как ребята пытаются заставить внешнюю оперативную память работать на MCU STM32F417. Проект пробует некоторые вещи, которые действительно ресурс голодны, и внутренней памяти просто недостаточно.STM32F4 работает FreeRTOS во внешнем ОЗУ
Вопрос в том, как наилучшим образом сделать это.
Текущий подход состоял в том, чтобы просто заменить адрес RAM в скрипте связи (gnu ld) адресом для внешней ОЗУ.
Проблема с этим подходом заключается в том, что во время инициализации чип должен работать во внутренней памяти, поскольку FSMC не был инициализирован.
Кажется, что все работает, но как только pvPortMalloc запускается, мы получаем жесткую ошибку и, вероятно, из-за разыгрывания фиктивных адресов, мы видим, что переменные не инициализируются правильно в системном init (что имеет смысл, я думаю, внутренняя память не используется вообще, когда она, вероятно, должна быть).
Я понимаю, что это неопределенный вопрос, но каков общий подход при запуске кода во внешней RAM на Cortex M4 MCU, а точнее в STM32F4?
Благодаря
Что именно вам нужно разместить во внешней SRAM? Большая структура данных? Все ваши данные для чтения и записи? Вам нужен ваш код для запуска из SRAM или он может находиться во флэш-памяти? –
Наша первоначальная мысль заключалась в том, что было бы проще разместить все во внешнем баране. Существуют криптографические ключи и вычисления, которые действительно слишком велики для MCU. Но по определенным причинам нам все равно нужно это делать. Код может выполняться со вспышки просто отлично, поэтому все, что я имею в виду стека и кучи. – evading
Какую версию исходного файла управления кучей FreeRTOS вы используете (heap_1.c, heap_2.c и т. Д.)?Я считаю, что FreeRTOS выделяет стек задач в куче (используя pvPortMalloc), так что это может быть единственное, что вам нужно переместить в SRAM, но это в значительной степени зависит от используемой версии кучи _ *. C. –