Тюнинг Arduino,миф или реальность?
- Войдите на сайт для отправки комментариев
Втр, 23/10/2018 - 18:12
Прочитала статью http://codius.ru/articles/Тюнинг_Arduino_или_ускоряем_работу_платы
byte P10 = (1 << 2);//Pin 10 #define D10_OUTPUT DDRB |= P10 #define D10_HIGH PORTB |= P10 #define D10_LOW PORTB &= ~P10
Вижу что использование этого метода уменьшает объём скетча. Значителен ли прирост в скорости работы?
Далее:
В стаьтье написано:
#define D13_READ bitRead(PORTB, 5) // Команда чтения 5-го бита - соответствует пину D13
Почему bitRead, ведь вот так
#define D13_READ PINB & (1 << 5)
будет лучше? (быстрее) Или нет?
Вижу что использование этого метода уменьшает объём скетча. Значителен ли прирост в скорости работы?
Ну дык проверить самой не вариант? Всё злым дядькам на слово верить?
Почему bitRead, ведь вот так
В статье же написано:
Функции bitRead() и bitWrite() — именно тот случай, когда их низкоуровневая реализация не приведет к существенному увеличению производительности, так что в большинстве случаев проще использовать их именно в таком виде.
Опять же - проверьте сами, посмотрите из чего она состоит... Лучше будет, но ведь лучшее враг хорошего
Ардуину ускоряете, переносимость на другие МК - теряете. Выбор за Вами.
Irinka, открою страшную тайну - именно так лбращались к GPIO до появления проекта Ардуино. Новаторство Ардуино в том и заключается, что оно придумало вместо битовой математики более простые и понятные для юзеров функции, что существенно облегчило программирование МК для простых обывателей и привело к огромной популярности проекта во всем мире.
Конечно, за простоту и удобство приходится платить - в частности эффективностью кода и скоростью работы.
Так что никакого "тюнинга" тут нет. Скорее это возвращение к основам. По смыслу немного напоминает выкидывание из современной легковушки кондиционера, кожаных сидений и магнитолы - чтобы облегчить машину и улучшить время разгона до сотни :)
Что-то я туплю...
if (D2_READ){} и, соответственно, if (!D2_READ){}
или так?
if (D2_READ==1){} и, соответственно, if (D2_READ==0){}
PS Не ругайтесь)))
Что-то я туплю...
if (D2_READ){} и, соответственно, if (!D2_READ){}
или так?
if (D2_READ==1){} и, соответственно, if (D2_READ==0){}
PS Не ругайтесь)))
Чтобы не думать об operator precedence, следует в макросах активно использовать круглые скобки. Т.е.:
Что касается "так или так" - и так, и так можно.
Одно и то же
5416 байт. Использую вышеуказанные метод.
6056 байт. digitalRead()/digitalWrite()
Разница в 640 байт. Приятно
portd выходной порт. Так можно прочитать текущее значение выходного регистра.
pind входной порт. Всегда отдаёт то что на ноге. Даже если настроена нога как выход.
Не смущает, что в двух примерах, в одном - PIND, в другом - PORTD ? Не испытываете когнитивного диссонанса?
ТООООЧНО)))))))))
Есть еще один момент:
в digitalRead() и digitalWrite() параметр может быть переменной, а в более быстрых макросах - только константой.
Это смотря как их написать.
Если по-простому, то переменную в них использовать просто нельзя. А если по уму - т.е. не полениться расписать вычисление нужной команды прямо в макросе, то переменные использовать можно сколько угодно. Там получится, если константа, то препроцессор сам всё развернёт всё вплоть до нужной команды, а если переменная, то сгенерит код для вычисления нужной команды. Получившийся код будет работать с переменной будет не так быстро, как с константой, конечно, хотя и побыстрее, чем digitalRead.
Мне нравятся такие реализации. Избавляютот ковыряния в битах. При использовании констант - всё в одну инструкцию. И при этом синтаксически одинаково - константа или переменная.
444 байт (1%) памяти устройства и 9 байт (0%) динамической памяти
134 байт (0%) памяти устройства и 0 байт (0%) динамической памяти
Так оптимальнее(грамотнее) будет?
Ну, если Вам ничего ардуиновского не нужно, типа millis, analogWrite и пр.
Поняла. Спасибо.
Ассемблер сильно поможет с размером кода, если осилите. Как пример ~1200 байт кода обеспечивают работу круиз-контроля у меня в авто. Это с опросом GPS, кнопок , выводом данных на дисплей, прерываниями ... ...
Ассемблер сильно поможет с размером кода...
Особенно начинающие любят с АТ&Т синтаксисом. Ещё Форт, говорят, очень хорошую компактность даёт.
А ищщё ассемблер хорошо поглощает время, если его некуда деть ))
А ищщё ассемблер хорошо поглощает время, если его некуда деть ))
А ищщё ассемблер хорошо поглощает время, если его некуда деть ))
мне мое время значительно дороже :)
А ищщё ассемблер хорошо поглощает время, если его некуда деть ))
Жирные камни сейчас - пучок за условный доллар, и чем дальше - тем за условный доллар они будут жирнее. А вот часов в сутках - уже который миллион лет количество не меняется.
а как же ассемблерные вставки? ))
а так скоро будем мигать на малинке светодиодом )) технологии не стоят на месте )
почему глупость. в ардуино ассемблерная вставка и будет тюнинхом, если работа напрямую с портами уже считается дичью.
про ПЛИС вообще не понял и причем здесь каменный век )))
а как же ассемблерные вставки? ))
а так скоро будем мигать на малинке светодиодом )) технологии не стоят на месте )
Кроме шуток - в целом, вы правы, что касается второго предложения. Потому как - рынок, технологии, глупо это не учитывать. Если стоимость условной единицы производительности/объёма/плюшек - неуклонно падает, а развитие производственных средств идёт в ногу со временем - то вариант, когда на малинке моргают светодиодом - уже не выглядит шуткой. Хотя бы просто потому, что так может быть проще, быстрее, технологичней - применительно к какой-то конкретной задаче, разумеется.
Вот скажите, что бы вы выбрали при условии, что стоимость отличается не более, чем на 10-15%: старый восьмибитный камень со скудной периферией, или - 32х-битку, где всякого фаршу - до жопы? Сразу оговорюсь - давайте не будем рассматривать специфичность к задаче, вот просто - на уровне хобби? Миграция на жирные камни, по сути - неизбежна, потому как сейчас те же средства разработки - позволяют без усилий влиться в эту струю. Хобби (а мы тут чисто хоббийщики, по сути) - становится вкуснее и удобнее, и др@читься, извиняюсь, за разницу в 50 рублей - ну такое себе.
Просто мысли вслух, без претензий.
почему глупость.
Не парся. хороший секс для импотента всегда глупость. И ниче он не поймет, потому что не встает. Умение написать круиз контроллер в 1200 байт для таких предмет вечной злобной зависти, вот и беснуется, правда с ПЛИС он тоже не могет.
Про время. Разумеется на асме скорость разработки ниже. Вот только переход на "Жирные камни" не мгновенный какбы. И чем жирней тот камень - тем дольше его переферию изучать, а без этого переход на него и смысла не имеет. Мал того, камней этих наплодилось - шо у дурака фантиков. А в каждом глюков море, но пока не нырнеш - не узнаеш, т.к. доки хреновые, комюнити куцее спецов мало, я уже набодался както с онионом омега 2, самой компактной линукс платформой, могу поведать. Кроме того, у любого уважающего себя разраба найдется достаточно наработок, которые нужно тянуть за собой в новые жирные камни, а это тоже время, и не малое. Конечно у кого за душей ни строки может прыгать с камня на камень.