Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103
Если удалось "достать до дна", то обычно это уже приводит к неработоспособности алгоритма работающего в реальном времени. А если говорить не о реальном времени, то любое устройство, которое например отображает какие-то данные для пользователя, может работать на дне (только своей задачей визуализации) - ну и что?
Приглашаем 26 января на бесплатный вебинар, посвящённый преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре будут рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату. Рассмотрим новую группу продукции – встраиваемые источники питания в кожухе.
Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103
Если удалось "достать до дна", то обычно это уже приводит к неработоспособности алгоритма работающего в реальном времени. А если говорить не о реальном времени, то любое устройство, которое например отображает какие-то данные для пользователя, может работать на дне (только своей задачей визуализации) - ну и что?
Иногда пишу отдельные функции на асме. В том числе - и для оптимизации по скорости. Только обычно на CM4.
Тут девайс реального времени, специально нагружал расчётами мусора чтоб посмотреть что будет и как это будет, таймер просто вываливается из своего интервала
Может есть какие то примерчики реализаций оптимизации? я конечно местами использую асм для обхода ситуаций - не понятно почему генерируемых компилятором - но не уверен что делаю все правильно, т.к. литературы и примеров - раз-два в доступе..
С целью поддержки своих карбид-кремниевых MOSFET из линейки CoolSiC, обеспечивающих наиболее высокую в отрасли производительность, компания Infineon предлагает шесть моделей специализированных ИС драйверов затвора из линейки EiceDRIVER, основанных на одном выходном каскаде драйвера Rail-to-Rail.
Может есть какие то примерчики реализаций оптимизации?
Ну что значит "примерчики"? Для каждой задачи - своё решение. А из общий мелочей, ну например вместо: 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-ами как раз с целью оптимизации доступа и работы конвейера. Компиляторы уже давно это всё понимают. Их разработчики годами занимаются повышением эффективности. Я вот не могу похвастаться, что завсегда сделаю лучше компилятора. Да, часто можно сделать лучше, но только потому что я знаю про код который пишу немного больше, чем говорю компилятору.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения