⏲️Самое быстрое ногодрыгание на Ардуино😮

Поделиться
HTML-код
  • Опубликовано: 23 янв 2025

Комментарии • 50

  • @TDMLab
    @TDMLab  6 лет назад +19

    Интересный факт:
    Продвинутый пользователь платформы меня поправил, самый быстрый код (из адекватных) для и изменения состояния пина Ардуино в цикле будет:
    while(1)
    {
    PORTD = 0x4;
    PORTD =~0x4;
    }
    Что дает нам 4 цикла или 4МГц скорости изменения :)

    • @pswru
      @pswru 4 года назад +1

      Спасибо за инфу.
      Лично мне как НЕ написавшему ни 1 строки кода на асме для атмел - всегда были интересны причины давнего холивара "атмел или пик".
      6:22 вполне даёт часть ответа - на атмеле команды "чтение-модификация-запись" исполняются 2 цикла, на Пике - 1 цикл.
      И второй момент - в Пик18 в дополнение к "очистить" и "поставить" есть команда "смена состояния бита", на атмеле я её НЕ увидал.
      В итоге - ногодрыг 1 ногой (в отличие от приведённого примера на Си где меняется ВЕСЬ порт как я понял код Си) на пике будет 3 цикла (смена состояния и безусловный относительный переход), при этом меандр со скважностью 1/1 будет генерится. Если чуть схитрить и сделать например 8 штук смен состояния подряд а потом безусловный переход - то будет уже 1.125 цикла на смену состояния в среднем, но сигнал на ноге не будет меандром.
      Какие выводы ? Как минимум обработка флагов на Пиках вдвое быстрее, а код достаточно сложного прожекта весьма часто обрабатывает флаги, как минимум в диспетчере потоков, на который приходится 1/10-1/3 потока исполнения в реальном прожекте. Через это - то что лично мне удалось впихнуть в 12 МИПС на Пик-18 - поклонники атмела вряд ли смогут сделать на 16 МИПС на атмеле.

    • @TDMLab
      @TDMLab  4 года назад +2

      @@pswru атмеги они такие)
      Честно говоря этот холиар потерял свой смысл очень-очень давно, сейчас это как сравнивать ВАЗ 2101 и москвич 412-й, когда рядом стоит BMW, и которая стоит дешевле🙂

    • @pswru
      @pswru 4 года назад

      @@TDMLab Блин длинный ответ потерялся из-за клика мышой мимо - вкратце суть была в расширении сравнения полуторки-1940 и экстраполяции на БМВ-2050 и возвращаясь к мелкопроцам - сегодняшним реалиям "код конфигуратора" и "иксов" собирающих прожект из кубиков.
      И вывод от лично меня был - ресурса безусловно больше, но эффективность его использования безусловно меньше - в итоге полноценных самописанных частотников на новых камнях больше не станет. Но люди как обезъяны станут умничать про "новые возможности" и продавать друг другу гигагерцы и ширину шин и мегапиксели вместо достижения результата минимальными затратами ресурса.

    • @TDMLab
      @TDMLab  4 года назад

      @psw2.ru "продавать друг другу гигагерцы и ширину шин ... вместо достижения результата ..." - да, именно так и происходит😆
      Справедливости ради у тех же STM-ов 1.25 DMIPS/MHz то есть в среднем за такт выполняется больше одной команды и если к этому прибавить DMA, тут сложно спорить, что они на голову опережают AVR и PIC.
      А так, конечно согласен, что нужно достигать результата минимальными средствами, но эти заветы предков уже почти забыты)))

    • @pswru
      @pswru 4 года назад

      @@TDMLab Пик в отличие от многих других продавцов гигагерцев - всегда славился богатой периферией в сравнении с атмелом как минимум. В той длинной потерянной мессаге лично я собственно отвлёкся на поиски ссылки даташита на новые 16 бит Пики которые в том числе для контроля моторов. Например ww1.microchip.com/downloads/en/DeviceDoc/dsPIC33CK256MP508-Family-Data-Sheet-DS70005349H.pdf - 600 страниц текста, и это без нюансов типа описания PWM подробного.

  • @Инженерка
    @Инженерка 6 лет назад +3

    Век живи век учись ))) Спасибо за новые знания )))

  • @AlexanderHin
    @AlexanderHin 6 лет назад +1

    Очень доходчиво, спасибо

  • @ВасилисаПримудрая-х9ц

    Спасибо. Было интересно.

  • @сергейбаглаев-ф3х
    @сергейбаглаев-ф3х 3 года назад

    все получилось , ассемблер такая же ширина импульсов

  • @Zotio
    @Zotio 3 года назад

    2 способ дергание всем портом.
    Или же я ошибаюсь?

  • @ДмитрийМакаров-и6л
    @ДмитрийМакаров-и6л 3 года назад

    А можно ли сделать таким способом очень быстрый ЦАП хотя бы на 2Мгц?

    • @TDMLab
      @TDMLab  3 года назад

      на ардуино нет.

  • @TyrkoPyrko
    @TyrkoPyrko 4 года назад +1

    Вообще на другом канале даже показывали какая ассемблерная простыня выходит при классическом методе дрыгания ногами... Простыня..........

  • @сергейбаглаев-ф3х
    @сергейбаглаев-ф3х 3 года назад

    ассемблерная вставка не работает может библиотека нужна?

    • @TDMLab
      @TDMLab  3 года назад

      Нет, по идеи нет. По крайней мере на тот момент ничего не нужно было. Asm по дефолту встроен в компилятор gcc. Ошибку дает?

  • @vzo6951
    @vzo6951 3 года назад

    конечно скорость это хорошо . но бывает что в прерывании не видит переменную и это в тормознутом коде. а если нужно считать показания с термодатчика например скорость дает неправильные показания . или надо всю библиотеку переписывать под ассемблер .

    • @TDMLab
      @TDMLab  3 года назад

      Что бы переменная могла изменяться в прерывании и корректно возвращаться можно использовать ключевое слово volatile

    • @vzo6951
      @vzo6951 3 года назад

      @@TDMLab значит это возможно притормаживает чтение в прерывании ))

    • @TDMLab
      @TDMLab  3 года назад +1

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

    • @vzo6951
      @vzo6951 3 года назад

      @@TDMLab спасибо !

  • @TDMLab
    @TDMLab  6 лет назад +3

    И еще момент: НИКОГДА не используйте команду GOTO в С++ от слова СОВСЕМ ;)
    Я это делаю только в научных целях))))

    • @XanderEVGs
      @XanderEVGs 6 лет назад +1

      получается что на встроенной функции loop тратится 600кгц. интересно, что там происходит в ней

  • @сергейбаглаев-ф3х
    @сергейбаглаев-ф3х 3 года назад

    запятую забыл но ширина импульса такая же

  • @belpyro
    @belpyro 3 года назад +3

    Отличный ролик! Правда грустно, что для большинства ардуинщиков такая информация остается за скобками. Зачем напрягаться и изучать внутренности самого контроллера, когда можно писать, как code monkey и не париться. Так инженерная культура и умирает. Смотришь на современного программиста и тоска берет: человек не просто не понимает работу процессора и периферии, так даже фреймворк, с которым работает лень изучить. Как итог - приложения на десятки гигабайт, так еще и тормозят и глючат.

    • @ХаткиЧиль
      @ХаткиЧиль 3 года назад +2

      Да! Избыток ресурса развращает. Я помню лет 30 назад в нашем КБ осваивали Автокад и машины были IBM PC 286 (!) Так я тогда заморочился на формировании и оптимизации команды построения рамки чертежа с угловыми штампами автозаполнением, и масштабированием для форматов А4; А3; А2; А1 и всё это на LISP....
      Кажется Уложился тогда менее чем 1,5 Кбайта. Вот что дефицит аппаратных ресурсов делал. Тогда была актуална 1001 заповедь: _любую программу можно сократить на один шаг_
      А сейчас я вообще далеёк от этого. Так жизнь повернулась. Вот решил вспомнить и мозги немного раскачать.

    • @theadlerm
      @theadlerm 3 года назад +3

      Меткое замечатени.. А ведь автор, всего лишь, приоткрыл шторку и подсказал что "электричетсво берется не совсем из розетки".. Только вот, инженерная культура, имхо, не совсем умирает, хоть и ее становится все менее видно за поделками доморощенных "ардуинщиков" (не понимающих процесс происходящего). Пока еще много задач, и будет много, в которых без понимания процессов не сделать ничего.

  • @сергейбаглаев-ф3х
    @сергейбаглаев-ф3х 3 года назад

    заработала

  • @RenatRkrkaft
    @RenatRkrkaft 3 года назад

    еще быстрее это перепаять кварц)))

  • @johnrom8787
    @johnrom8787 3 года назад

    А подключить таймер без делителя разве не самый быстрый способ? Тогда процессор вообще задействовать не нужно

    • @TDMLab
      @TDMLab  3 года назад

      Программный способ, не аппаратный.

  • @Al.Sy.
    @Al.Sy. 4 года назад +1

    Автор скромно умолчал, что расплата за такой код - плохая переносимость, плохо отслеживаемый код с волшебными константами.

    • @TDMLab
      @TDMLab  4 года назад +2

      Портируемый код это удел персональных компьютеров. Я предпочитаю использовать сильные "железные" стороны микроконтроллеров. При этом код будет работать на 8битных AVR МК с аналогичной системой регистров.

    • @Al.Sy.
      @Al.Sy. 4 года назад

      @@TDMLab Вовсе не удел ПК. Ибо адрес регистра даже на ATmega разных моделей отличаются. Вот и приходится вспоминать, что за порт скрывается под номером. Пример: TCNT2 на ATmega32A имеет адрес 0x24(0x44), на ATmega324A адрес TCNT2 уже 0xB2. Чипы по распиновке абсолютно одинаковые. И если приспичило сменить "камень" и прошивку в ней, то всю работу по правильной адресации ляжет на компилятор, а не разработчика.

    • @TDMLab
      @TDMLab  4 года назад +2

      @@Al.Sy. Согласен. Для портируемости никто не запрещает использовать библиотеки с адресацией регистров различных МК. В любом случае ассемблерные вставки это тонкий инструмент разового пользования.

    • @pswru
      @pswru 4 года назад

      @@TDMLab А разве во вставках на асме в Си нельзя использовать символьные имена аппаратных регистров, которые наследуются из включаемого файла описания ресурсов мелкопроца ?

    • @TDMLab
      @TDMLab  4 года назад

      @@pswru Да, можно, я просто не совсем правильно выразился.

  • @СергейКураев-в2з
    @СергейКураев-в2з 6 лет назад

    можно еще выжать несколько сотен килогерц, почти до 4 МГц

    • @niyazleushkin
      @niyazleushkin 3 года назад

      И как же?

    • @СергейКураев-в2з
      @СергейКураев-в2з 3 года назад

      @@niyazleushkin лол, 2 года прошло, я уже и не помню о чем речь

    • @valbob8144
      @valbob8144 2 года назад

      @@СергейКураев-в2з ну что, выжали ? Или нам еще год подождать ?

    • @СергейКураев-в2з
      @СергейКураев-в2з 2 года назад

      @@valbob8144 ждите, мне то что?

  • @gyggit
    @gyggit 2 года назад

    ну вы и гении, ребята, почему таких людей не видит "наше" правительство и не производит процессоры, а когда санкции то автоваз встал и всё 'замерло' :((