Например TDA7294

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





Текущее время: Чт мар 28, 2024 11:31:41

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


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



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

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

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


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

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


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

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


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

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


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

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

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

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

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

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

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


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

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

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

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

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

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



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

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

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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

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

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1145
Рейтинг сообщения: 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
Сообщений: 90
Откуда: Зеленоград
Рейтинг сообщения: 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 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1145
Рейтинг сообщения: 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 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 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 
Поставщик валерьянки для Кота

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

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


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

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 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
Сообщений: 63
Рейтинг сообщения: 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 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 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 
Друг Кота

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

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


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

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

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


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

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


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

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


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

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


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