Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Мне надоело пробовать уже. Первые разы были с выключенной оптимизацией. Результаты выложены.
Скорее всего, если понадобится ускорять код, то придется пробовать и так и сяк. Ибо разные коды, ведут себя по разному. Один работатет быстрее во флеш, другой в ОЗУ и наоборот.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Лучше всего конечно это поправить файл линковщика. Но мне было лень, я не очень с ним на "ты" и надо тихонько скрипеть мозгами.
Делал так. Атрибуты массива закоментарьте, не сработали. Но мой компилятор массив констант (const) сам определяет во флеш без дополнительного указания. Убрав const - массив перебирается в ОЗУ.
Чтобы зарядить foo в озу в прототип добавлял атрибут __attribute__((section(".data")));. В коде что я Вам скинул он закоментарен, что означает фу во флеше.
Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту.
Добавлено after 2 minutes 13 seconds: Компилятор GCC. У Вас может как-то по другому.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Попробуйте прошивки потестить, я скомпилировал разные. с приставкой data это с .data. Остальной код как вы скинули. Оптимизация указана в имени файла. Отпишитесь какие частоты выводятся, что-нибудь изменилось нет.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Код и должен разным компилится.
Вывод из всего выше проведенного: 1. Таракан без ног не слышит. 2. Для f103, а может и для остальных STM32, нельзя однозначно утверждать что код будет быстрее выполняться в той или иной памяти. 3. Даже использование сверхоперативной памяти (регистров) не гарантирует ускорения и в некоторых случаях даже замедляет. 4. Для ускорения кода нужно оптимизировать код именно под ту память или пробовать различные комбинации размещения кода и выбрать оптимальное, учитывая частоту тактирования. 5. Возможно это справедливо для МК ARM других производителей.
Повторю свой вывод, по-скольку на текущий момент считаю его ключевым: нельзя однозначно утверждать что код выполняется быстрее в одной памяти, чем в другой.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ну память если и влияет то процентов 5 от силы. Все остальное это работа с регистрами периферии, исполнение инструкций, набор команд. Каждая инструкция занимает время, их количество. DMA например не зря есть. Ускоряет намного работу с периферией.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
В этом тесте максимальная частота 14.025 кГц , минимальная 7.418 кГц. Соотношение почти в два раза при выполнении одного и того же кода и обработки массива с одними и теми же данными. При том что самый медленный код - это код из флеш, с массивом констант во флеш (т.е. самое классическое решение).
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Да все во флеш тоже пихать смысла нет, если ОЗУ имеет свободное место, то конечно из ОЗУ быстрее выборка. Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Код и должен разным компилится. 5. Возможно это справедливо для МК ARM других производителей. ... нельзя однозначно утверждать что код выполняется быстрее в одной памяти, чем в другой.
Это справедливо для всех МК. И чем сложнее и навороченнее МК (чем больше в нём кешей, типов памяти и сложной матрицы шин работающих на разных частотах и т.п.) и чем сложнее алгоритм работы МК - тем справедливее.
Сейчас этот форум просматривают: xDriver и гости: 33
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения