Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выполнение кода из ОЗУ STM32F4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Sekat
Подскажите по SUBJ. Это реальный путь для STM32F4 повысить производительность?
С ходу попробовал разместить подпрограммку в ОЗУ - время выполнения осталось прежним. Я так понимаю, что число WaitStates автоматически не уменьшилось до 0. Есть ли какие элегантные способы для STM32F4 (кроме как установки числа WS вручную при входе в озушный код), с учетом многозадачной среды , с учетом того, что размещаемый код в общем случае может прерываться другими задачами не из ОЗУ, добиться требуемого результата?
aaarrr
Цитата(Sekat @ Sep 10 2013, 17:07) *
Подскажите по SUBJ. Это реальный путь для STM32F4 повысить производительность?
С ходу попробовал разместить подпрограммку в ОЗУ - время выполнения осталось прежним.

У Flash в наличии две шины и ускоритель, у ОЗУ - одна. Так что результат примерно таким и должен быть. WS на ОЗУ не распространяются.
Sekat
Цитата(aaarrr @ Sep 10 2013, 17:20) *
У Flash в наличии две шины и ускоритель, у ОЗУ - одна. Так что результат примерно таким и должен быть. WS на ОЗУ не распространяются.

Спасибо. Жаль, я рассчитывал...
Для информации по производительности, уж коль скоро такая тема была создана. Плата STM32F4 Discovery.
Реально из ОЗУ даже медленнее работает, чем из Flash. Не очень на много, но медленнее (примерно полпроцента). Далее установки для варианта выполнения программы из Flash. Кэш кода и данных включены, PRFTEN выключен. Включение последнего дает прирост производительности примерно 2%. Уменьшение WS с 4-х до 3-х (при этом еще работает) дает прирост производительности еще ~3%. Установить WS 2 не позволяет (уже не работает).
scifi
Цитата(Sekat @ Sep 10 2013, 17:07) *
Есть ли какие элегантные способы для STM32F4

Попробуйте замапить ОЗУ на нулевой адрес (SYSCFG_MEMRMP), должно стать быстрее. Да, ну и код выполнять из адресов 0x00******, а не 0x20******. Дело в том, что инструкции из 0x20****** идут в процессор через шину System Interface, в она вносит лишний такт задержки на каждую инструкцию и не умеет заглатывать две 16-битные инструкции в один присест, в отличие от шины ICode.
В мануале на процессор это расписано, и вот тут сегодня тоже обсуждалось.
jcxz
Может просто - по-старинке - переписать критичные места на асме? sm.gif
LWW
Задрать тактовую под 260 мгц и выполнить код из озу. Потом всё вернуть обратно..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.