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

  Рет қаралды 5,240

TDM Lab

TDM Lab

5 жыл бұрын

Три способа ставить и очищать бит порта на Ардуино УНО. Изучаем ассемблерные вставки в Arduino IDE
Интересные сайты: сайт Паяльник cxem.net

Пікірлер: 50
@TDMLab
@TDMLab 5 жыл бұрын
Интересный факт: Продвинутый пользователь платформы меня поправил, самый быстрый код (из адекватных) для и изменения состояния пина Ардуино в цикле будет: while(1) { PORTD = 0x4; PORTD =~0x4; } Что дает нам 4 цикла или 4МГц скорости изменения :)
@pswru
@pswru 3 жыл бұрын
Спасибо за инфу. Лично мне как НЕ написавшему ни 1 строки кода на асме для атмел - всегда были интересны причины давнего холивара "атмел или пик". 6:22 вполне даёт часть ответа - на атмеле команды "чтение-модификация-запись" исполняются 2 цикла, на Пике - 1 цикл. И второй момент - в Пик18 в дополнение к "очистить" и "поставить" есть команда "смена состояния бита", на атмеле я её НЕ увидал. В итоге - ногодрыг 1 ногой (в отличие от приведённого примера на Си где меняется ВЕСЬ порт как я понял код Си) на пике будет 3 цикла (смена состояния и безусловный относительный переход), при этом меандр со скважностью 1/1 будет генерится. Если чуть схитрить и сделать например 8 штук смен состояния подряд а потом безусловный переход - то будет уже 1.125 цикла на смену состояния в среднем, но сигнал на ноге не будет меандром. Какие выводы ? Как минимум обработка флагов на Пиках вдвое быстрее, а код достаточно сложного прожекта весьма часто обрабатывает флаги, как минимум в диспетчере потоков, на который приходится 1/10-1/3 потока исполнения в реальном прожекте. Через это - то что лично мне удалось впихнуть в 12 МИПС на Пик-18 - поклонники атмела вряд ли смогут сделать на 16 МИПС на атмеле.
@TDMLab
@TDMLab 3 жыл бұрын
@@pswru атмеги они такие) Честно говоря этот холиар потерял свой смысл очень-очень давно, сейчас это как сравнивать ВАЗ 2101 и москвич 412-й, когда рядом стоит BMW, и которая стоит дешевле🙂
@pswru
@pswru 3 жыл бұрын
@@TDMLab Блин длинный ответ потерялся из-за клика мышой мимо - вкратце суть была в расширении сравнения полуторки-1940 и экстраполяции на БМВ-2050 и возвращаясь к мелкопроцам - сегодняшним реалиям "код конфигуратора" и "иксов" собирающих прожект из кубиков. И вывод от лично меня был - ресурса безусловно больше, но эффективность его использования безусловно меньше - в итоге полноценных самописанных частотников на новых камнях больше не станет. Но люди как обезъяны станут умничать про "новые возможности" и продавать друг другу гигагерцы и ширину шин и мегапиксели вместо достижения результата минимальными затратами ресурса.
@TDMLab
@TDMLab 3 жыл бұрын
@psw2.ru "продавать друг другу гигагерцы и ширину шин ... вместо достижения результата ..." - да, именно так и происходит😆 Справедливости ради у тех же STM-ов 1.25 DMIPS/MHz то есть в среднем за такт выполняется больше одной команды и если к этому прибавить DMA, тут сложно спорить, что они на голову опережают AVR и PIC. А так, конечно согласен, что нужно достигать результата минимальными средствами, но эти заветы предков уже почти забыты)))
@pswru
@pswru 3 жыл бұрын
@@TDMLab Пик в отличие от многих других продавцов гигагерцев - всегда славился богатой периферией в сравнении с атмелом как минимум. В той длинной потерянной мессаге лично я собственно отвлёкся на поиски ссылки даташита на новые 16 бит Пики которые в том числе для контроля моторов. Например ww1.microchip.com/downloads/en/DeviceDoc/dsPIC33CK256MP508-Family-Data-Sheet-DS70005349H.pdf - 600 страниц текста, и это без нюансов типа описания PWM подробного.
@user-ut5yb4fq8i
@user-ut5yb4fq8i 5 жыл бұрын
Век живи век учись ))) Спасибо за новые знания )))
@AlexanderHin
@AlexanderHin 5 жыл бұрын
Очень доходчиво, спасибо
@user-nq1qx7qt5i
@user-nq1qx7qt5i 3 жыл бұрын
Спасибо. Было интересно.
@user-wq4ft4gy2l
@user-wq4ft4gy2l 2 жыл бұрын
все получилось , ассемблер такая же ширина импульсов
@TyrkoPyrko
@TyrkoPyrko 3 жыл бұрын
Вообще на другом канале даже показывали какая ассемблерная простыня выходит при классическом методе дрыгания ногами... Простыня..........
@user-wq4ft4gy2l
@user-wq4ft4gy2l 2 жыл бұрын
заработала
@TDMLab
@TDMLab 5 жыл бұрын
И еще момент: НИКОГДА не используйте команду GOTO в С++ от слова СОВСЕМ ;) Я это делаю только в научных целях))))
@XanderEVGs
@XanderEVGs 5 жыл бұрын
получается что на встроенной функции loop тратится 600кгц. интересно, что там происходит в ней
@belpyro
@belpyro 3 жыл бұрын
Отличный ролик! Правда грустно, что для большинства ардуинщиков такая информация остается за скобками. Зачем напрягаться и изучать внутренности самого контроллера, когда можно писать, как code monkey и не париться. Так инженерная культура и умирает. Смотришь на современного программиста и тоска берет: человек не просто не понимает работу процессора и периферии, так даже фреймворк, с которым работает лень изучить. Как итог - приложения на десятки гигабайт, так еще и тормозят и глючат.
@user-we9bb3sp6p
@user-we9bb3sp6p 3 жыл бұрын
Да! Избыток ресурса развращает. Я помню лет 30 назад в нашем КБ осваивали Автокад и машины были IBM PC 286 (!) Так я тогда заморочился на формировании и оптимизации команды построения рамки чертежа с угловыми штампами автозаполнением, и масштабированием для форматов А4; А3; А2; А1 и всё это на LISP.... Кажется Уложился тогда менее чем 1,5 Кбайта. Вот что дефицит аппаратных ресурсов делал. Тогда была актуална 1001 заповедь: _любую программу можно сократить на один шаг_ А сейчас я вообще далеёк от этого. Так жизнь повернулась. Вот решил вспомнить и мозги немного раскачать.
@theadlerm
@theadlerm 3 жыл бұрын
Меткое замечатени.. А ведь автор, всего лишь, приоткрыл шторку и подсказал что "электричетсво берется не совсем из розетки".. Только вот, инженерная культура, имхо, не совсем умирает, хоть и ее становится все менее видно за поделками доморощенных "ардуинщиков" (не понимающих процесс происходящего). Пока еще много задач, и будет много, в которых без понимания процессов не сделать ничего.
@user-zk9rn1op5v
@user-zk9rn1op5v 2 жыл бұрын
А можно ли сделать таким способом очень быстрый ЦАП хотя бы на 2Мгц?
@TDMLab
@TDMLab 2 жыл бұрын
на ардуино нет.
@Zotio
@Zotio 2 жыл бұрын
2 способ дергание всем портом. Или же я ошибаюсь?
@user-wq4ft4gy2l
@user-wq4ft4gy2l 2 жыл бұрын
запятую забыл но ширина импульса такая же
@RenatRkrkaft
@RenatRkrkaft 3 жыл бұрын
еще быстрее это перепаять кварц)))
@vzo6951
@vzo6951 2 жыл бұрын
конечно скорость это хорошо . но бывает что в прерывании не видит переменную и это в тормознутом коде. а если нужно считать показания с термодатчика например скорость дает неправильные показания . или надо всю библиотеку переписывать под ассемблер .
@TDMLab
@TDMLab 2 жыл бұрын
Что бы переменная могла изменяться в прерывании и корректно возвращаться можно использовать ключевое слово volatile
@vzo6951
@vzo6951 2 жыл бұрын
@@TDMLab значит это возможно притормаживает чтение в прерывании ))
@TDMLab
@TDMLab 2 жыл бұрын
@@vzo6951 Нет, это просто жестко связывает переменную и ее адрес в памяти и позволяет работать с ней из любой части программы хоть из прерывания, хоть из основного цикла, не боясь потерять данные.
@vzo6951
@vzo6951 2 жыл бұрын
@@TDMLab спасибо !
@user-wq4ft4gy2l
@user-wq4ft4gy2l 2 жыл бұрын
ассемблерная вставка не работает может библиотека нужна?
@TDMLab
@TDMLab 2 жыл бұрын
Нет, по идеи нет. По крайней мере на тот момент ничего не нужно было. Asm по дефолту встроен в компилятор gcc. Ошибку дает?
@johnrom8787
@johnrom8787 3 жыл бұрын
А подключить таймер без делителя разве не самый быстрый способ? Тогда процессор вообще задействовать не нужно
@TDMLab
@TDMLab 3 жыл бұрын
Программный способ, не аппаратный.
@Al.Sy.
@Al.Sy. 4 жыл бұрын
Автор скромно умолчал, что расплата за такой код - плохая переносимость, плохо отслеживаемый код с волшебными константами.
@TDMLab
@TDMLab 4 жыл бұрын
Портируемый код это удел персональных компьютеров. Я предпочитаю использовать сильные "железные" стороны микроконтроллеров. При этом код будет работать на 8битных AVR МК с аналогичной системой регистров.
@Al.Sy.
@Al.Sy. 4 жыл бұрын
@@TDMLab Вовсе не удел ПК. Ибо адрес регистра даже на ATmega разных моделей отличаются. Вот и приходится вспоминать, что за порт скрывается под номером. Пример: TCNT2 на ATmega32A имеет адрес 0x24(0x44), на ATmega324A адрес TCNT2 уже 0xB2. Чипы по распиновке абсолютно одинаковые. И если приспичило сменить "камень" и прошивку в ней, то всю работу по правильной адресации ляжет на компилятор, а не разработчика.
@TDMLab
@TDMLab 4 жыл бұрын
@@Al.Sy. Согласен. Для портируемости никто не запрещает использовать библиотеки с адресацией регистров различных МК. В любом случае ассемблерные вставки это тонкий инструмент разового пользования.
@pswru
@pswru 3 жыл бұрын
@@TDMLab А разве во вставках на асме в Си нельзя использовать символьные имена аппаратных регистров, которые наследуются из включаемого файла описания ресурсов мелкопроца ?
@TDMLab
@TDMLab 3 жыл бұрын
@@pswru Да, можно, я просто не совсем правильно выразился.
@user-bb9go8bi9e
@user-bb9go8bi9e 5 жыл бұрын
можно еще выжать несколько сотен килогерц, почти до 4 МГц
@user-wx1ns5hf3h
@user-wx1ns5hf3h 3 жыл бұрын
И как же?
@user-bb9go8bi9e
@user-bb9go8bi9e 3 жыл бұрын
@@user-wx1ns5hf3h лол, 2 года прошло, я уже и не помню о чем речь
@valbob8144
@valbob8144 Жыл бұрын
@@user-bb9go8bi9e ну что, выжали ? Или нам еще год подождать ?
@user-bb9go8bi9e
@user-bb9go8bi9e Жыл бұрын
@@valbob8144 ждите, мне то что?
@user-gy8qn3fb6z
@user-gy8qn3fb6z 2 жыл бұрын
ну вы и гении, ребята, почему таких людей не видит "наше" правительство и не производит процессоры, а когда санкции то автоваз встал и всё 'замерло' :((
Дешёвый и простой USB осциллограф
10:17
Андрей Абалевич
Рет қаралды 10 М.
Математика это не Ислам
0:21
Golden Man
Рет қаралды 7 МЛН
Main filter..
0:15
CikoYt
Рет қаралды 219 М.
5 НЕЛЕГАЛЬНЫХ гаджетов, за которые вас посадят
0:59
Кибер Андерсон
Рет қаралды 1,1 МЛН