реклама на сайте
подробности

 
 
> STM32F4: разница в скорости обращения при размещении массива в DRAM и в FLASH программ?, есть ли универсальный ответ что быстрее?
Ruslan1
сообщение Jun 13 2017, 08:11
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



есть STM32F429. И внешняя SDRAM, подключенная по 16-битной шине.
Нужно часто читать из массива 4-байтные величины (коэффициенты оконной функции). Где лучше разместить этот массив: в SDRAM или во FLASH программ, насколько велика разница?
Всегда ли это однозначно (XX быстрее чем YY), или все-таки нужно считать текущую времянку в соответствии с настройками шин?

Сейчас во флэше и все устраивает, но в будущем хочется просто генерировать массив после включения и класть в SDRAM, мне так удобнее, вот только про быстродействие непонятно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Jun 13 2017, 08:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ruslan1 @ Jun 13 2017, 10:11) *
Всегда ли это однозначно (XX быстрее чем YY), или все-таки нужно считать текущую времянку в соответствии с настройками шин?

Зависит от частоты шины к SDRAM, наличия кеша флешь и др.
А в чём проблема просто померить варианты тот и тот? Минутное дело, сюда вопрос дольше писать. wink.gif
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jun 13 2017, 08:47
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(jcxz @ Jun 13 2017, 10:15) *
Зависит от частоты шины к SDRAM, наличия кеша флешь и др.
А в чём проблема просто померить варианты тот и тот? Минутное дело, сюда вопрос дольше писать. wink.gif

у меня могозадачка и много чего там крутится, запросто могу промахнуться при разовом тесте и измерить необъективно из-за того что оно что-то начало делать более приоритетное и ресурсоемкое. Думал мне просто скажут- все ежи однозначно бегут вот сюда, все уже разжевано и доказано sm.gif.
Ну и лень, опять же....
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 13 2017, 11:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ruslan1 @ Jun 13 2017, 10:47) *
у меня могозадачка и много чего там крутится,

И запрещать прерывания тоже не умеете??
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jun 13 2017, 12:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(jcxz @ Jun 13 2017, 13:41) *
И запрещать прерывания тоже не умеете??

Я много чего не умею, чем дольше живу-тем больше всего не умею.

Ладно, понял, спасибо. Раз ответ на мой вопрос не такой однозначный как я думал- буду получать ответ локально.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 13 2017, 12:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ruslan1 @ Jun 13 2017, 14:07) *
Ладно, понял, спасибо. Раз ответ на мой вопрос не такой однозначный как я думал- буду получать ответ локально.

Вот смотрите - написал для Вас за 4 минуты нужный Вам тест laughing.gif
Код
PUBLIC f1
f1: CPSID I
     MOVS R1, #250
f1_1: LDMIA R0!, {R2-R4,R12}
     LDMIA R0!, {R2-R4,R12}
     LDMIA R0!, {R2-R4,R12}
     LDMIA R0!, {R2-R4,R12}
     SUBS R1, R1, #1
     BNE f1_1
     CPSIE I
     RET

Объявляете его как:
extern "C" void f1(void const *);
Вначале вызываете с адресом в SDRAM, потом - во флешь. Смотрите сколько тактов получилось. Сравниваете.
Код выполняет 4000 32-битных последовательных чтений памяти.
Всё!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 15 2017, 04:20
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(jcxz @ Jun 13 2017, 14:56) *
Вот смотрите - написал для Вас за 4 минуты нужный Вам тест laughing.gif

Там конечно не RET, а BX LR нужен. Запутался совсем с этим STM8 wacko.gif

Цитата(Ruslan1 @ Jun 14 2017, 21:06) *
Профайлинг показал, что общее время вычислений (не только чтение буфера, естественно) скачет от 16 до 69 миллисекунд (зависит от других задач с высокими приоритетами),

Профайлинг у Вас неправильный. Нужно встать на начало измеряемого участка; поставить бряк на его конец; запретить прерывания; нажать кнопку Run в отладчике; когда остановится на бряке, посмотреть содержимое счётчика тактов. Вот и всё. А Вы температуру на Марсе меряете... laughing.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016