Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103
Если удалось "достать до дна", то обычно это уже приводит к неработоспособности алгоритма работающего в реальном времени. А если говорить не о реальном времени, то любое устройство, которое например отображает какие-то данные для пользователя, может работать на дне (только своей задачей визуализации) - ну и что?
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103
Если удалось "достать до дна", то обычно это уже приводит к неработоспособности алгоритма работающего в реальном времени. А если говорить не о реальном времени, то любое устройство, которое например отображает какие-то данные для пользователя, может работать на дне (только своей задачей визуализации) - ну и что?
Иногда пишу отдельные функции на асме. В том числе - и для оптимизации по скорости. Только обычно на CM4.
Тут девайс реального времени, специально нагружал расчётами мусора чтоб посмотреть что будет и как это будет, таймер просто вываливается из своего интервала
Может есть какие то примерчики реализаций оптимизации? я конечно местами использую асм для обхода ситуаций - не понятно почему генерируемых компилятором - но не уверен что делаю все правильно, т.к. литературы и примеров - раз-два в доступе..
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Может есть какие то примерчики реализаций оптимизации?
Ну что значит "примерчики"? Для каждой задачи - своё решение. А из общий мелочей, ну например вместо: int i; if ((int)(i -= N) < 0) i = 0; если известно, что (uint)i < (1u<<31) можно использовать: i = __USAT(i - N, 31); Изучайте систему команд CPU - много полезного найдёте!
Может есть какие то примерчики реализаций оптимизации?
Ну что значит "примерчики"? Для каждой задачи - своё решение. А из общий мелочей, ну например вместо: int i; if ((int)(i -= N) < 0) i = 0; если известно, что (uint)i < (1u<<31) можно использовать: i = __USAT(i - N, 31); Изучайте систему команд CPU - много полезного найдёте!
На 72МГц ногодрыг предел 12МГц и это синтетически на ассемблере просто переключение ноги в цикле и с учетом особенностей конвеера. Если просто на Си это же написать, уже будет вроде 8МГц, просто переключение ноги в цикле. Что-то осмысленное вообще драматические цифры выдаст по сравнению с тактовой.
Чтобы просто поменять значение ноги на порту, нужно: 1. Загрузить в регистр адрес. 2. Загрузить в регистр значение по этому адресу. 3. Изменить значение. 4. Записать обратно.
В том же STM8 это можно сделать одной командой bset/bres . На 16МГц STM8 из аккумулятора через bccm можно выплюнуть ногодрыгом осмысленный байт на 8МГц.
Благо у STM32 богатая периферия и следует ее хорошо изучить и использовать.
Последний раз редактировалось dekus Вт июл 02, 2019 13:16:12, всего редактировалось 1 раз.
Что-то осмысленное вообще драматические цифры выдаст по сравнению с тактовой.
Чтобы просто поменять значение ноги на порту, нужно: 1. Загрузить в регистр адрес. 2. Загрузить в регистр значение по этому адресу. 3. Изменить значение. 4. Записать обратно.
В том же STM8 это можно сделать одной командой bset/bres .
Вы мешаете в кучу особенности разных архитектур и эффект от применения ассемблера по сравнению с C.
Три простых примера. Тут компилятор раскрутил цикл.
Сделаем цикл подлиннее, не дадим ему самовольничать
И всё же с раскруткой было быстрее, поможем ему чутка
А вот ещё панкуха. Поменяем на обратный порядок бит на 32-битной шине.
Или вот то же самое на 8-битной.
Резюме! Всё нужно применять к месту. Ассемблер там где без него действительно не обойтись. Ногодрыг, собственно, тоже.
Неправда, будет то же самое. С-ные компиляторы сейчас умные.
Вы можете выложить скриншот с осциллографа или лог. анализатора с результатом 12МГц на F103 72МГц с простым кодом - переключение туда сюда одной ноги в бесконечном цикле?
Умный компилятор все равно не умнее человека .
Последний раз редактировалось dekus Ср июл 03, 2019 08:15:06, всего редактировалось 2 раз(а).
Вы можете выложить скриншот с осциллографа или лог. анализатора с результатом 12МГц на F103 72МГц с простым кодом - переключение туда сюда одной ноги в бесконечном цикле?
STM32 - это далеко не один устаревший F1, у меня F3 при 120MHz за 2 такта берет данные с порта и складывает в массив, т.е. наверняка можно получить меандр частотой 60MHz(при запуске из CCM), если без цикла, конечно. Опять же быстрый ногодрыг у мк на ядре M0+, там при обращении к портам идет работа напрямую с ними, минуя шину.
Вы можете выложить скриншот с осциллографа или лог. анализатора с результатом 12МГц на F103 72МГц с простым кодом - переключение туда сюда одной ноги в бесконечном цикле (что может быть проще)? Я не говорю что это не возможно, просто убедиться.
Железок сегодня под рукой нет, но нет оснований не доверять листингам
Не поленился. Кейл, оптимизация O3, speed. Да, 2 STR в цикле. Это все понятно. Но это был вопрос с подвохом. Но я же не просто так специально дописал про конвеер до этого.
И это только один простой пример и только работы конвеера. Куча нюансов где никакой компилятор не справится, по сравнению с человеком.
Это тоже неправда. Многократно замечал "выкрутасы" компилятора по изменению очерёдности исполнения команд и выравниванию nop-ами как раз с целью оптимизации доступа и работы конвейера. Компиляторы уже давно это всё понимают. Их разработчики годами занимаются повышением эффективности. Я вот не могу похвастаться, что завсегда сделаю лучше компилятора. Да, часто можно сделать лучше, но только потому что я знаю про код который пишу немного больше, чем говорю компилятору.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения