Например TDA7294

Форум РадиоКот • Просмотр темы - Кто то доставал до дна производительности STM32F1 ?
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пт май 14, 2021 03:30:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 73 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 13:20:42 
Встал на лапы

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Чт дек 09, 2010 12:03:08
Сообщений: 86
Откуда: Зеленоград
Рейтинг сообщения: 4
Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103

Ассемблеристы есть ? 8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 13:48:18 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 154
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 1
Для этого не нужен ассемблер, это не авр. Для этого надо досконально знать периферию а не юзать софтовоеногодрочерство


Вернуться наверх
 

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc

Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 14:12:08 
Встал на лапы

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Чт дек 09, 2010 12:03:08
Сообщений: 86
Откуда: Зеленоград
Рейтинг сообщения: 0
Для этого не нужен ассемблер, это не авр. Для этого надо досконально знать периферию а не юзать софтовоеногодрочерство


Хм, открытия не сделал конечно, я с этим согласен, но все же хотелось бы привлечь в эту ветку ассемблерного умельца

Есть просто проект, который скоро нащупает дно производительности, хотелось бы обсудить отладку и всякие тонкости по тактам выполнения кода


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 14:43:49 
Вымогатель припоя

Карма: -17
Рейтинг сообщений: 11
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 625
Рейтинг сообщения: 0
Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103

Если удалось "достать до дна", то обычно это уже приводит к неработоспособности алгоритма работающего в реальном времени.
А если говорить не о реальном времени, то любое устройство, которое например отображает какие-то данные для пользователя, может работать на дне (только своей задачей визуализации) - ну и что?

Добавлено after 1 minute 31 second:
Ассемблеристы есть ? 8)

Иногда пишу отдельные функции на асме. В том числе - и для оптимизации по скорости. Только обычно на CM4.


Вернуться наверх
 
Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 15:24:29 
Встал на лапы

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Чт дек 09, 2010 12:03:08
Сообщений: 86
Откуда: Зеленоград
Рейтинг сообщения: 0
Очень интересны проекты, так скажем "высоконагруженные" в которых не хватало бы производительности камушков STM32F103

Если удалось "достать до дна", то обычно это уже приводит к неработоспособности алгоритма работающего в реальном времени.
А если говорить не о реальном времени, то любое устройство, которое например отображает какие-то данные для пользователя, может работать на дне (только своей задачей визуализации) - ну и что?

Добавлено after 1 minute 31 second:
Ассемблеристы есть ? 8)

Иногда пишу отдельные функции на асме. В том числе - и для оптимизации по скорости. Только обычно на CM4.



Тут девайс реального времени, специально нагружал расчётами мусора чтоб посмотреть что будет и как это будет, таймер просто вываливается из своего интервала

Может есть какие то примерчики реализаций оптимизации? я конечно местами использую асм для обхода ситуаций - не понятно почему генерируемых компилятором - но не уверен что делаю все правильно, т.к. литературы и примеров - раз-два в доступе..

Так скажем на перспективу изучаю вопрос


Вернуться наверх
 
Интеллектуальные ключи верхнего плеча семейства PROFET™+2 12V от Infineon

Компания Infineon представила новое семейство защищенных силовых ключей PROFET™+2 12V. Изделия объединяют в себе функции диагностики и различные защиты. Ключи PROFET™+2 12V имеют одно из самых низких в отрасли сопротивлений в открытом состоянии RDS(ON) (от 2,6 мОм) и выпускаются в миниатюрном корпусе TSDSO-14 с шагом выводов 0,65 мм. Благодаря функции ReverseON все семейство соответствует строгим требованиям по защите от обратной полярности питания, впервые реализованной в одном чипе.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 15:41:02 
Вымогатель припоя

Карма: -17
Рейтинг сообщений: 11
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 625
Рейтинг сообщения: 0
Может есть какие то примерчики реализаций оптимизации?

Ну что значит "примерчики"? Для каждой задачи - своё решение.
А из общий мелочей, ну например вместо:
int i;
if ((int)(i -= N) < 0) i = 0;
если известно, что (uint)i < (1u<<31) можно использовать:
i = __USAT(i - N, 31);
Изучайте систему команд CPU - много полезного найдёте!

т.к. литературы и примеров - раз-два в доступе..

Единственная литература которая для этого нужна: http://infocenter.arm.com/help/topic/co ... 3_dgug.pdf
Больше ничего не нужно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Пт июн 28, 2019 15:54:45 
Встал на лапы

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Чт дек 09, 2010 12:03:08
Сообщений: 86
Откуда: Зеленоград
Рейтинг сообщения: 0
Может есть какие то примерчики реализаций оптимизации?

Ну что значит "примерчики"? Для каждой задачи - своё решение.
А из общий мелочей, ну например вместо:
int i;
if ((int)(i -= N) < 0) i = 0;
если известно, что (uint)i < (1u<<31) можно использовать:
i = __USAT(i - N, 31);
Изучайте систему команд CPU - много полезного найдёте!

т.к. литературы и примеров - раз-два в доступе..

Единственная литература которая для этого нужна: http://infocenter.arm.com/help/topic/co ... 3_dgug.pdf
Больше ничего не нужно.


Вот этот документ как раз то что нужно - спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Вт июл 02, 2019 11:35:50 
Первый раз сказал Мяу!

Карма: 5
Рейтинг сообщений: 31
Зарегистрирован: Пн янв 16, 2012 00:49:07
Сообщений: 39
Откуда: Москва
Рейтинг сообщения: 0
На 72МГц ногодрыг предел 12МГц и это синтетически на ассемблере просто переключение ноги в цикле и с учетом особенностей конвеера. Если просто на Си это же написать, уже будет вроде 8МГц, просто переключение ноги в цикле. Что-то осмысленное вообще драматические цифры выдаст по сравнению с тактовой.

Чтобы просто поменять значение ноги на порту, нужно:
1. Загрузить в регистр адрес.
2. Загрузить в регистр значение по этому адресу.
3. Изменить значение.
4. Записать обратно.

В том же STM8 это можно сделать одной командой bset/bres :). На 16МГц STM8 из аккумулятора через bccm можно выплюнуть ногодрыгом осмысленный байт на 8МГц.

Благо у STM32 богатая периферия и следует ее хорошо изучить и использовать.


Последний раз редактировалось dekus Вт июл 02, 2019 13:16:12, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Вт июл 02, 2019 13:10:56 
Вымогатель припоя

Карма: -17
Рейтинг сообщений: 11
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 625
Рейтинг сообщения: 0
На 72МГц ногодрыг предел 12МГц и это синтетически на ассемблере просто переключение ноги в цикле и с учетом особенностей конвеера.

Про ногодрыг тут никто вроде и не говорил. С чего Вы его сюда приплели? :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Вт июл 02, 2019 13:17:17 
Первый раз сказал Мяу!

Карма: 5
Рейтинг сообщений: 31
Зарегистрирован: Пн янв 16, 2012 00:49:07
Сообщений: 39
Откуда: Москва
Рейтинг сообщения: 0
Я ничего не приплетал. Второе сообщение прочитайте. Про ногодрыг и перефирию. Я продолжил :).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 06:12:44 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 265
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1570
Рейтинг сообщения: 0
Если просто на Си это же написать, уже будет вроде 8МГц, просто переключение ноги в цикле.
Неправда, будет то же самое. С-ные компиляторы сейчас умные.

Что-то осмысленное вообще драматические цифры выдаст по сравнению с тактовой.

Чтобы просто поменять значение ноги на порту, нужно:
1. Загрузить в регистр адрес.
2. Загрузить в регистр значение по этому адресу.
3. Изменить значение.
4. Записать обратно.

В том же STM8 это можно сделать одной командой bset/bres :).
Вы мешаете в кучу особенности разных архитектур и эффект от применения ассемблера по сравнению с C.

Три простых примера. Тут компилятор раскрутил цикл.

Сделаем цикл подлиннее, не дадим ему самовольничать

И всё же с раскруткой было быстрее, поможем ему чутка


А вот ещё панкуха. Поменяем на обратный порядок бит на 32-битной шине.

Или вот то же самое на 8-битной.


Резюме! Всё нужно применять к месту. Ассемблер там где без него действительно не обойтись. Ногодрыг, собственно, тоже.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 07:37:45 
Первый раз сказал Мяу!

Карма: 5
Рейтинг сообщений: 31
Зарегистрирован: Пн янв 16, 2012 00:49:07
Сообщений: 39
Откуда: Москва
Рейтинг сообщения: 0
Неправда, будет то же самое. С-ные компиляторы сейчас умные.

Вы можете выложить скриншот с осциллографа или лог. анализатора с результатом 12МГц на F103 72МГц с простым кодом - переключение туда сюда одной ноги в бесконечном цикле?

Умный компилятор все равно не умнее человека :).


Последний раз редактировалось dekus Ср июл 03, 2019 08:15:06, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 08:01:43 
Это не хвост, это антенна

Карма: 21
Рейтинг сообщений: 223
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 1469
Рейтинг сообщения: 0
Вы можете выложить скриншот с осциллографа или лог. анализатора с результатом 12МГц на F103 72МГц с простым кодом - переключение туда сюда одной ноги в бесконечном цикле?

STM32 - это далеко не один устаревший F1, у меня F3 при 120MHz за 2 такта берет данные с порта и складывает в массив, т.е. наверняка можно получить меандр частотой 60MHz(при запуске из CCM), если без цикла, конечно. Опять же быстрый ногодрыг у мк на ядре M0+, там при обращении к портам идет работа напрямую с ними, минуя шину.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 08:08:37 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 265
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1570
Рейтинг сообщения: 0
Вы можете выложить скриншот с осциллографа или лог. анализатора с результатом 12МГц на F103 72МГц с простым кодом - переключение туда сюда одной ноги в бесконечном цикле (что может быть проще)? Я не говорю что это не возможно, просто убедиться.
Железок сегодня под рукой нет, но нет оснований не доверять листингам
Код:
  for(PA_1 NOGA;;)
  {
    NOGA=1;
    NOGA=0;
  }

Код:
        LDR.N    R0,??DataTable4_2  ;; 0x40010810
        MOVS     R1,#+2
??main_0:
        STR      R1,[R0, #+0]
        STR      R1,[R0, #+4]
        B.N      ??main_0


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 09:41:10 
Открыл глаза

Зарегистрирован: Вс мар 24, 2013 17:21:28
Сообщений: 56
Рейтинг сообщения: 0
Действительно 12 МГц :)
Код:
void setup() {
GPIOA_BASE->CRL = 0x33 ;//PA0 -выход
asm volatile (
  "mov   R0, %[port]"   "\n\t"
  "mov   R1, 0x1"         "\n\t" 
  "loop:"                        "\n\t"
  "str   R1, [R0,#+0]"    "\n\t" // BSRR <- (1 << 0)
  "str   R1,  [R0,#+4]"   "\n\t" // BSR  <- (1 << 0)
  "B.N  loop"                  "\n\t"     
: : [port]"r" (&GPIOA_BASE->BSRR)
: "r0","r1"
);


Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 10:12:14 
Первый раз сказал Мяу!

Карма: 5
Рейтинг сообщений: 31
Зарегистрирован: Пн янв 16, 2012 00:49:07
Сообщений: 39
Откуда: Москва
Рейтинг сообщения: 0
Не поленился. Кейл, оптимизация O3, speed. Да, 2 STR в цикле. Это все понятно. Но это был вопрос с подвохом. Но я же не просто так специально дописал про конвеер до этого.

Код:
#include <stm32f10x.h>

#define TEST_PIN 4
int main()
{
   RCC->APB2ENR = RCC_APB2ENR_IOPAEN;
   GPIOA->CRL = 0x03 << (TEST_PIN*4);
   while(1) {
      GPIOA->BRR = 1<<TEST_PIN;
      GPIOA->BSRR = 1<<TEST_PIN;
   }
}


Код:
    10:         while(1) {
0x0800031E 4906      LDR      r1,[pc,#24]  ; @0x08000338
0x08000320 F44F3040  MOV      r0,#0x30000
0x08000324 6008      STR      r0,[r1,#0x00]
    11:                 GPIOA->BRR = 1<<TEST_PIN;
0x08000326 4905      LDR      r1,[pc,#20]  ; @0x0800033C
0x08000328 2010      MOVS     r0,#0x10
    12:                 GPIOA->BSRR = 1<<TEST_PIN;
0x0800032A 1F0A      SUBS     r2,r1,#4
0x0800032C 6008      STR      r0,[r1,#0x00]
0x0800032E 6010      STR      r0,[r2,#0x00]
    10:         while(1) {
0x08000330 E7FC      B        0x0800032C


И обращаем внимание на адрес перехода. Не повезло.
И получаем 10МГц :( .

Тот же самый код, только добавляем перед циклом 2 NOP, чтобы выровнять переход до 0x08000330
Код:
   11:                 GPIOA->BRR = 1<<TEST_PIN;
0x0800032A 2010      MOVS     r0,#0x10
0x0800032C 4904      LDR      r1,[pc,#16]  ; @0x08000340
    12:                 GPIOA->BSRR = 1<<TEST_PIN;
0x0800032E 1F0A      SUBS     r2,r1,#4
0x08000330 6008      STR      r0,[r1,#0x00]
0x08000332 6010      STR      r0,[r2,#0x00]
    10:         while(1) {
0x08000334 E7FC      B        0x08000330


Теперь обращаем внимание на адрес перехода.
И о чудо, уже 12МГц.

И это только один простой пример и только работы конвеера. Куча нюансов где никакой компилятор не справится, по сравнению с человеком.


Последний раз редактировалось dekus Ср июл 03, 2019 10:42:00, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 10:28:14 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 265
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1570
Рейтинг сообщения: 0
И это только один простой пример и только работы конвеера. Куча нюансов где никакой компилятор не справится, по сравнению с человеком.
Это тоже неправда. Многократно замечал "выкрутасы" компилятора по изменению очерёдности исполнения команд и выравниванию nop-ами как раз с целью оптимизации доступа и работы конвейера. Компиляторы уже давно это всё понимают. Их разработчики годами занимаются повышением эффективности. Я вот не могу похвастаться, что завсегда сделаю лучше компилятора. Да, часто можно сделать лучше, но только потому что я знаю про код который пишу немного больше, чем говорю компилятору.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 10:32:13 
Первый раз сказал Мяу!

Карма: 5
Рейтинг сообщений: 31
Зарегистрирован: Пн янв 16, 2012 00:49:07
Сообщений: 39
Откуда: Москва
Рейтинг сообщения: 0
Вам конкретный пример привел про отсутствие 2Мгц из 12 со всеми листингами для повторения.


Последний раз редактировалось dekus Ср июл 03, 2019 10:35:37, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 10:34:40 
Друг Кота

Карма: 46
Рейтинг сообщений: 293
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 12917
Рейтинг сообщения: 0
"Ага! — сказали суровые сибирские лесорубы. И ушли рубить лес топорами." :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Кто то доставал до дна производительности STM32F1 ?
СообщениеДобавлено: Ср июл 03, 2019 10:50:53 
Говорящий с текстолитом
Аватар пользователя

Карма: 11
Рейтинг сообщений: 265
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 1570
Рейтинг сообщения: 0
Вам конкретный пример привел про отсутствие 2Мгц из 12 со всеми листингами для повторения.
На эти "грабли" с одинаковым успехом можно наступить и на асме. И если вы о них знаете, то костылять их будете одинаково что на сишечке, что на асме.

Кстати, 2 МГц у вас слизали, скорее всего, не конвейер, а синхронизация между разными шинами.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  1, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y