лично я бы так и сделал, поставил бы delay в сетапе, исходя из задачи ТС, но
Moro_500 пишет:
ТС-у нужно принципиально чтоб без delay
v258 пишет:
а ты вообще ардуину на две секунды застопорил
дак
Moro_500 пишет:
она не блокирует МК, это пустой цикл, в который если надо, можно добавить какие-то действия
пердуинка обладает скромными ресурсами, вот и боремся за каждый байт, каждый такт, я и не говорил что мой пример идеален, но он явно эффективнее из предложенных здесь трёх примеров за 50 постов.
Моро500 - хуже нет когда мужик начинает юлить.
Замена delay() на такой, как у тебя, while - типичная ошибка новичка. И смотреть, как ты виляешь, пытаясь представить, что "так и задумано" - просто противно.
Я вижу, что тебя сейчас не переубедить, но это не беда - с твоим самомнением ты непременно скоро сядешь в лужу в чем-нибудь другом
лично я бы так и сделал, поставил бы delay в сетапе, исходя из задачи ТС, но
Задача ТС - запустить блинк через две секунды после включения. Нигде не было оговорено, что и все остальное должно задержаться на две секунды. Стало быть нужно задерживать именно блинк. И эта задача решается безо всяких блокировок
b707, да у вас, месье, богатая фантазия, я бы вообще просто delay в сетапе поставил и всё, потому что мне надо, сука, НИЧЕГО не делать первые 2 секунды, но поставил миллис т.к. в условиях задачи ТС не юзать делай, да, фантазии у вас много, жаль только что не для примера кода, но только не такого медленного как у wdrakula
v258 пишет:
Она блокирует МК ибо ничем от простого делея не отличается
нет,
Moro_500 пишет:
она не блокирует МК, это пустой цикл, в который если надо, можно добавить какие-то действия
v258 пишет:
Нигде не было оговорено, что и все остальное должно задержаться на две секунды. Стало быть нужно задерживать именно блинк.
да, но и обратное не было обговорено, если надо задерживать только блинк, тогда это уже совсем другое дело.
Моя профессия - ИП, свой автокран, и давай ты бомжара не будешь мне давать советы...
...тут куча бреда...
1. ИП - это не профессия, а организационная форма - Индивидуальный предприниматель.
2. автокран? то есть пролетарий? ну что ты в науку то лезешь?
3. слово "бомжара" в этом случае нужно было выделить запятыми. Так что и с языком проблемы.
Таким образом имеем плохо образованного пролетария с амбициями. Брысь уж, лишенец.
-----------------
Я, кстати, не учу тебя груз закреплять на твоем кране. Ты же, непонятно с какого хера, лезешь в программирование. Андриано уже написал тебе, я только повторю: да, проверка занимает дополнительные такты, но этим я плачу за отсутствие кода в сетапе. В целом - это оправданная плата. Эффективность кода не является главной целью. Ты же не ведешь свой кран по улицам с максимальной разрешенной скоростью? Кроме времени в дороге, у тебя есть более важные критерии, так?
Надоело мне спорить. С твоим подходом забанят тебя скоро, так что нет нужды привыкать.
она не блокирует МК, это пустой цикл, в который если надо, можно добавить какие-то действия
Она блокирует МК ибо ничем от простого делея не отличается
более того, если заглянуть в исходник delay() - там внутри именно такой цикл и зашит.
Так что код с while аналогичен делею не только по смыслу, но и по оформлению. Единственная причина заменять delay на подобный while - это внешнее условие "не использовать делеи", которое выдает ТС с головой - такие условия могут ставится только преподом в учебных целях.
Так что я сразу сказал, что ТС двоешник, пришел на форум домашку списывать. А ты такой же двоешник - сразу полез ему помогать, даже не спросив, откуда это бредовое условие
wdrakula, лучше же быть бомжарой, главное чтоб не пролетарием, правда? а с русским у меня проблем нет, иногда я специально брезгую запятыми и вообще пишу как слышу, особенно в чатах, если мы на контрольной по русскому ну подъеби тогда и себя, с маленькой буквы пишешь
в программирование лезу потому что ардуинки и взлом ехе-шников игр на ассемблере это моё хобби, глядя на ассемблерный код, видишь как после компиляции всё не эффективно организовано, сколько бесполезных тактов, джампов на соседний адрес, нопов, и тд., а всё ради того чтоб программистам на сях было удобно кодить, для игр не критично, а пердуинки стремлюсь оптимизировать, даже выполнение пустого if без условия и тела это уже операция перехода по адресу
в программирование лезу потому что ардуинки и взлом ехе-шников игр на ассемблере это моё хобби, глядя на ассемблерный код, видишь как после компиляции всё не эффективно организовано, сколько бесполезных тактов, джампов на соседний адрес, нопов, и тд., а всё ради того чтоб программистам на сях было удобно кодить, для игр не критично, а пердуинки стремлюсь оптимизировать, даже выполнение пустого if без условия и тела это уже операция перехода по адресу
Какую то хрень вы говорите. Не генерит компилятор никаких ненужных нопов, никогда. И то что вы не понимаете зачем нопы и джампы не означает, что они бестолковые и не нужные. Вы может где то что то ломаете, как вам кажется, но ваши слова вот лично меня не то что бы удивляют, они заставляют задумываться о вашем уровне понимания вопроса... Причем уровень этот начинает вызывать подозрения....
Причем уровень этот начинает вызывать подозрения....
Брокли, куда спешить-то? Время покажет, что он стоит.
Сколько тут уже было уверенных в себе "знатоков языка с университетским уровнем"? - десять? двадцать? - каждый раз это заканчивается либо "помогите написать цикл For", либо , из последнего - огромным срачем на тему того, что сумма нескольких байт не может поместится в 8 бит :))))
Да. Потому что она именно блокирует. Хоть чем ее наполни - она ВСЕ РАВНО БЛОКИРУЕТ.
а можно в этом цикле сделать if проверку чего-либо и если условие верное то сделать break внутри if, что приведёт к выходу из while до того как пройдут эти 2 секунды, эта конструкция блокирует МК не больше чем любой другой while
Да. Потому что она именно блокирует. Хоть чем ее наполни - она ВСЕ РАВНО БЛОКИРУЕТ.
а можно в этом цикле сделать if проверку чего-либо и если условие верное то сделать break внутри if, что приведёт к выходу из while до того как пройдут эти 2 секунды, эта конструкция блокирует МК не больше чем любой другой while
Да сколько ж можно? Какие еще действия может выполнять МК, пока две секунды шлет весточки по радио? А с учетом того, что это запхнуто в setup? А с учетом того, что в конкретном твоем коде НИКАКОГО наполнения действиями не было? А с учетом того, что delay() определяется именно таким образом, т.е. ты просто переписал вместо делея его реализацию? Утомил, короче ))
эта конструкция блокирует МК не больше чем любой другой while
Снова пролетарщина прет. Ты просто не знаешь терминологии. "Блокирующий код" - код который останавливает loop() или иной основной цикл МК. В твоем случае то, что свой говнокод ты разместил в сетапе - ничего не меняет. Начало лупа отложено. "Неблокирующий код" - проходится за микро или милли секунды, и выполнение основного цикла продолжается, вне зависимости от того, разместил ли ты что-то внутри холостого цикла или нет.
делей - блокирует, как и его суррогаты, типа твоего. Проверка времени - не блокирует.
=======================
Коллеги! Еще раз, мы спорим с крановщиком! Не ай-я-яй? Ну и пусть он останется при своем мнении! Это мнение - крановщика! ;))) О программировании. Не смешно? Давайте с сантехником еще пообщаемся или с грузчиком. Про разницу статической и динамической типизации в компилируемых ЯП пятого поколения.
Да сколько ж можно? Какие еще действия может выполнять МК, пока две секунды шлет весточки по радио?
Да сколько ж можно? ЛЮБЫЕ!
v258 пишет:
А с учетом того, что в конкретном твоем коде НИКАКОГО наполнения действиями не было?
А с учётом того что конкретной этой задачей было ничего не делать 2 секунды?
v258 пишет:
А с учетом того, что delay() определяется именно таким образом
А с учётом того что во время delay нельзя ничего выполнять, а во время while можно всё что угодно?
Moro_500 пишет:
bwn, уровень подготовки дедов здесь как я посмотрю "доверяй но проверяй". Причина: "правильный говнокод".
ой всё, утомили старпёры шаблонно мыслящие, я вообще тут новичёк и знания языка поверхностные, но мы тут обсуждали простейшие примеры с простейшими циклами
для того чтоб посчитать за какое время две nRF24L01 успеют обменяться 100 пакетами, прошу не ругаться на говнокод/быдлокод, я там ничего не оптимизировал, есть сотня вариантов конструкций для выполнения одной и той же задачи и я не говорю что это одна из лучших
в строке 37 находится бесконечный безусловный цикл while(true), в нём несколько условий, 1 break и 2 return, если пакеты приходят не позже 10 мс, то while продолжается, если пакет не дошёл, то while прерывается и начинается следующий цикл loop, почти всё время программа находится в while(true) и на короткое время выходит из него либо если потерялся пакет, либо если набралось 100 пакетов, короче break и return делают выход из while, являются ли по вашему мнению эти while блокирующими, если да, то я понятия не имею и не могу представить каким может быть неблокирующий while который мы тут обсуждаем
я понятия не имею и не могу представить каким может быть неблокирующий while который мы тут обсуждаем
Мы не обсуждаем неблокирующих while. Любой цикл блокирует выполнение программы. И это ни хорошо и не плохо. При грамотном применении все нормально работает. При неграмотном получается хня. Я тебе даже крамольную мысль скажу - delay() сам по себе тоже ничем не плох и в каких-то случаях его применение вполне оправдано. Тут речь идет о том, что ты (лично ты) применил блокировку там, где ее применять не было нужды. Более того, тебе даже два варианта неблокирующей задержки показали. За что ты тут вторую страницу воюешь - не понятно
Да. без делей :) Но что толку? Вы в курсе. что такая конструкция так же блокирует МК, как задержка? - тогда зачем выпендриваться, так и пишите delay(2000)
С delay или без - это вопрос не технический (блокировки там всякие, прости Господи) а чисто религиозный. А Вы таким постами оскорбляете чувства верующих!
Ну, переменная на стеке, её ещё объявить надо где-то. Кстати, лямбду можно подсократить "->uint8_t" там явное эстетство. Компилятор и сам не развалится преобразовать :-)
Мне он напоминает юного студента, который вдруг познал, что он велик и пытается казаться умудренным старцем. Или так и не повзрослевшего инфантила. ИМХО.
Скетч использует 1086 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 25 байт (1%) динамической памяти, оставляя 2023 байт для локальных переменных. Максимум: 2048 байт.
1) Константы в 1-3 строках не нужны в принципе. Каждая из них занимает два байта. Если заменить их дефайнами, то занимать не будут ничего, а на функционале не скажется
4) Переменная newMillis имела бы значение, если бы использовалась не только в сравнении, а и в 16 строке. Это имело бы смысл в случае, если накопление погрешности недопустимо для каких-то точных измерений, в обычном блинке это излишне. Значит и ее оптимизируем ))
С дефайнами я читал есть свои "заморочки", рекомендуют их заменить на const или constexpr (VS вот у меня рекомендует заменить на последнее, хотя не знаю ещё почему)
У меня const ничего лишнего не отбирает у Ардуины. Перешёл с define на const, чтобы размерности переменных считались корректно. А то так в запале UL забудешь и мозги кипятишь.
Тернарный оператор с двумя присваиваиваниями волшебен, конечно: ledOn ? (onOffTime = OffTime) : (onOffTime = OnTime);
лично я бы так и сделал, поставил бы delay в сетапе, исходя из задачи ТС, но
дак
пердуинка обладает скромными ресурсами, вот и боремся за каждый байт, каждый такт, я и не говорил что мой пример идеален, но он явно эффективнее из предложенных здесь трёх примеров за 50 постов.
Моро500 - хуже нет когда мужик начинает юлить.
Замена delay() на такой, как у тебя, while - типичная ошибка новичка. И смотреть, как ты виляешь, пытаясь представить, что "так и задумано" - просто противно.
Я вижу, что тебя сейчас не переубедить, но это не беда - с твоим самомнением ты непременно скоро сядешь в лужу в чем-нибудь другом
она не блокирует МК, это пустой цикл, в который если надо, можно добавить какие-то действия
Она блокирует МК ибо ничем от простого делея не отличается
лично я бы так и сделал, поставил бы delay в сетапе, исходя из задачи ТС, но
Задача ТС - запустить блинк через две секунды после включения. Нигде не было оговорено, что и все остальное должно задержаться на две секунды. Стало быть нужно задерживать именно блинк. И эта задача решается безо всяких блокировок
Первый раз условие в шестой строке сработает не ранее, чем через две секунды. Не нравится statusLED? Да пожалуйста
пердуинка обладает скромными ресурсами, вот и боремся за каждый байт, каждый такт
Ардуинка раз в 30 по производительности превосходит первое поколение массовых ПК. А задачи у нее, как правило, попроще.
Так что в подавляющем большинстве случаев бороться "за каждый байт, каждый такт" совершенно излишне.
А в небольшом числе оставшихся лишь небольшой процент кода (обычно не более 10%) являются критичными к скорости выполнения.
Во всех остальных случаях на первый план выходит надежность кода, а также возможность его поддержки, модификации и повторного использования.
b707, да у вас, месье, богатая фантазия, я бы вообще просто delay в сетапе поставил и всё, потому что мне надо, сука, НИЧЕГО не делать первые 2 секунды, но поставил миллис т.к. в условиях задачи ТС не юзать делай, да, фантазии у вас много, жаль только что не для примера кода, но только не такого медленного как у wdrakula
нет,
да, но и обратное не было обговорено, если надо задерживать только блинк, тогда это уже совсем другое дело.
1. ИП - это не профессия, а организационная форма - Индивидуальный предприниматель.
2. автокран? то есть пролетарий? ну что ты в науку то лезешь?
3. слово "бомжара" в этом случае нужно было выделить запятыми. Так что и с языком проблемы.
Таким образом имеем плохо образованного пролетария с амбициями. Брысь уж, лишенец.
-----------------
Я, кстати, не учу тебя груз закреплять на твоем кране. Ты же, непонятно с какого хера, лезешь в программирование. Андриано уже написал тебе, я только повторю: да, проверка занимает дополнительные такты, но этим я плачу за отсутствие кода в сетапе. В целом - это оправданная плата. Эффективность кода не является главной целью. Ты же не ведешь свой кран по улицам с максимальной разрешенной скоростью? Кроме времени в дороге, у тебя есть более важные критерии, так?
Надоело мне спорить. С твоим подходом забанят тебя скоро, так что нет нужды привыкать.
она не блокирует МК, это пустой цикл, в который если надо, можно добавить какие-то действия
Она блокирует МК ибо ничем от простого делея не отличается
более того, если заглянуть в исходник delay() - там внутри именно такой цикл и зашит.
Так что код с while аналогичен делею не только по смыслу, но и по оформлению. Единственная причина заменять delay на подобный while - это внешнее условие "не использовать делеи", которое выдает ТС с головой - такие условия могут ставится только преподом в учебных целях.
Так что я сразу сказал, что ТС двоешник, пришел на форум домашку списывать. А ты такой же двоешник - сразу полез ему помогать, даже не спросив, откуда это бредовое условие
Это сколько же ТС народа обматерил из-за легендарного миллиса !? Фантастика :)
нет,
Да. Потому что она именно блокирует. Хоть чем ее наполни - она ВСЕ РАВНО БЛОКИРУЕТ.
А ты такой же двоешник - сразу полез ему помогать, даже не спросив, откуда это бредовое условие
Я не двоешник, я - пень трухлявый )))
Я не двоешник, я - пень трухлявый )))
это не вам, это мороку-500
смешно? нет, зато без delay.
wdrakula, лучше же быть бомжарой, главное чтоб не пролетарием, правда? а с русским у меня проблем нет, иногда я специально брезгую запятыми и вообще пишу как слышу, особенно в чатах, если мы на контрольной по русскому ну подъеби тогда и себя, с маленькой буквы пишешь
в программирование лезу потому что ардуинки и взлом ехе-шников игр на ассемблере это моё хобби, глядя на ассемблерный код, видишь как после компиляции всё не эффективно организовано, сколько бесполезных тактов, джампов на соседний адрес, нопов, и тд., а всё ради того чтоб программистам на сях было удобно кодить, для игр не критично, а пердуинки стремлюсь оптимизировать, даже выполнение пустого if без условия и тела это уже операция перехода по адресу
в программирование лезу потому что ардуинки и взлом ехе-шников игр на ассемблере это моё хобби, глядя на ассемблерный код, видишь как после компиляции всё не эффективно организовано, сколько бесполезных тактов, джампов на соседний адрес, нопов, и тд., а всё ради того чтоб программистам на сях было удобно кодить, для игр не критично, а пердуинки стремлюсь оптимизировать, даже выполнение пустого if без условия и тела это уже операция перехода по адресу
Какую то хрень вы говорите. Не генерит компилятор никаких ненужных нопов, никогда. И то что вы не понимаете зачем нопы и джампы не означает, что они бестолковые и не нужные. Вы может где то что то ломаете, как вам кажется, но ваши слова вот лично меня не то что бы удивляют, они заставляют задумываться о вашем уровне понимания вопроса... Причем уровень этот начинает вызывать подозрения....
Причем уровень этот начинает вызывать подозрения....
Брокли, куда спешить-то? Время покажет, что он стоит.
Сколько тут уже было уверенных в себе "знатоков языка с университетским уровнем"? - десять? двадцать? - каждый раз это заканчивается либо "помогите написать цикл For", либо , из последнего - огромным срачем на тему того, что сумма нескольких байт не может поместится в 8 бит :))))
И где они все? :)
вот вы говорите что моя конструкция
блокирует МК, это же цикл, в котором можно что то выполнять, например
ну и где он работает как делай и блокирует МК?
а можно в этом цикле сделать if проверку чего-либо и если условие верное то сделать break внутри if, что приведёт к выходу из while до того как пройдут эти 2 секунды, эта конструкция блокирует МК не больше чем любой другой while
вот вы говорите что моя конструкция
блокирует МК, это же цикл, в котором можно что то выполнять, например
ну и где он работает как делай и блокирует МК?
а можно в этом цикле сделать if проверку чего-либо и если условие верное то сделать break внутри if, что приведёт к выходу из while до того как пройдут эти 2 секунды, эта конструкция блокирует МК не больше чем любой другой while
Да сколько ж можно? Какие еще действия может выполнять МК, пока две секунды шлет весточки по радио? А с учетом того, что это запхнуто в setup? А с учетом того, что в конкретном твоем коде НИКАКОГО наполнения действиями не было? А с учетом того, что delay() определяется именно таким образом, т.е. ты просто переписал вместо делея его реализацию? Утомил, короче ))
Снова пролетарщина прет. Ты просто не знаешь терминологии. "Блокирующий код" - код который останавливает loop() или иной основной цикл МК. В твоем случае то, что свой говнокод ты разместил в сетапе - ничего не меняет. Начало лупа отложено. "Неблокирующий код" - проходится за микро или милли секунды, и выполнение основного цикла продолжается, вне зависимости от того, разместил ли ты что-то внутри холостого цикла или нет.
делей - блокирует, как и его суррогаты, типа твоего. Проверка времени - не блокирует.
=======================
Коллеги! Еще раз, мы спорим с крановщиком! Не ай-я-яй? Ну и пусть он останется при своем мнении! Это мнение - крановщика! ;))) О программировании. Не смешно? Давайте с сантехником еще пообщаемся или с грузчиком. Про разницу статической и динамической типизации в компилируемых ЯП пятого поколения.
Да сколько ж можно? ЛЮБЫЕ!
А с учётом того что конкретной этой задачей было ничего не делать 2 секунды?
А с учётом того что во время delay нельзя ничего выполнять, а во время while можно всё что угодно?
ой всё, утомили старпёры шаблонно мыслящие, я вообще тут новичёк и знания языка поверхностные, но мы тут обсуждали простейшие примеры с простейшими циклами
я вообще тут новичёк и знания языка поверхностные
Ну так и не спорь со старшими
хорошо, вот у меня скетч
для того чтоб посчитать за какое время две nRF24L01 успеют обменяться 100 пакетами, прошу не ругаться на говнокод/быдлокод, я там ничего не оптимизировал, есть сотня вариантов конструкций для выполнения одной и той же задачи и я не говорю что это одна из лучших
в строке 37 находится бесконечный безусловный цикл while(true), в нём несколько условий, 1 break и 2 return, если пакеты приходят не позже 10 мс, то while продолжается, если пакет не дошёл, то while прерывается и начинается следующий цикл loop, почти всё время программа находится в while(true) и на короткое время выходит из него либо если потерялся пакет, либо если набралось 100 пакетов, короче break и return делают выход из while, являются ли по вашему мнению эти while блокирующими, если да, то я понятия не имею и не могу представить каким может быть неблокирующий while который мы тут обсуждаем
Ух сколько сообщений сегодня появилось.
Читаю книги, пытаюсь понять, жду посылку с книгой ( на бумаге проще читать).
V258 мыслит правильно. Задержка должна быть только на мигание.
Спасибо всем за примеры.
Пробовать буду наверное только на выходных.
я понятия не имею и не могу представить каким может быть неблокирующий while который мы тут обсуждаем
Мы не обсуждаем неблокирующих while. Любой цикл блокирует выполнение программы. И это ни хорошо и не плохо. При грамотном применении все нормально работает. При неграмотном получается хня. Я тебе даже крамольную мысль скажу - delay() сам по себе тоже ничем не плох и в каких-то случаях его применение вполне оправдано. Тут речь идет о том, что ты (лично ты) применил блокировку там, где ее применять не было нужды. Более того, тебе даже два варианта неблокирующей задержки показали. За что ты тут вторую страницу воюешь - не понятно
А у меня такой вариант:
А у меня такой вариант:
Между прочим - ну ОЧЕНЬ красиво!!! Просто молодец! Можно умножение заменить на тернарный оператор, или поверить, что оптимизатор сам это сделает.
Можно умножение заменить на тернарный оператор, или поверить, что оптимизатор сам это сделает.
лучше переменную isBlink заменить на чтение из порта.
Но это код Кактуса и он таков, какой есть.
Кактус - молодец.
Работал с несколькими людьми с форума в тандеме заказчик-исполнитель. Кактус один из немногих, кто решает задачу быстро и правильно!
Работал с несколькими людьми с форума в тандеме заказчик-исполнитель. Кактус один из немногих, кто решает задачу быстро и правильно!
А остальные как - "не решают" или "неправильно"? :)
А остальные как - "не решают" или "неправильно"? :)
Вы мыслите, как истинный программер. Если я одного из вас выделил как true, то это не означает, что все остальные false. Ну как-то так )
Лично Вы мне тоже очень помогли некоторое время назад. Вы тоже true, если я Вас зацепил оценкой в копилку Кактусу )))))
А остальные как - "не решают" или "неправильно"? :)
Вы мыслите, как истинный программер. Если я одного из вас выделил как true, то это не означает, что все остальные false.
тем не менее смысл вашего поста получился именно такой :)
сорри, на похвалу не напрашивался. Если честно, не помню, чтобы у нас с Вами были какие-то проекты - иначе не написал бы.
сорри, на похвалу не напрашивался. Если честно, не помню, чтобы у нас с Вами были какие-то проекты - иначе не написал бы.
Проектов у нас с Вами пока не было. Был лишь Ваш альтруизм, который помог мне сдвинуться с мёртвой точки.
Kakmyc, аплодирую стоя.
wdrakula, видал как это делается? а ты чево нагородил?
такое ощущение что ты не лампочкой моргаешь а шаттл запускаешь)
Плескану масла в огонь:
Если же поциент отказывается это делать, его посылают гораздо дальше.
Да. без делей :) Но что толку? Вы в курсе. что такая конструкция так же блокирует МК, как задержка? - тогда зачем выпендриваться, так и пишите delay(2000)
С delay или без - это вопрос не технический (блокировки там всякие, прости Господи) а чисто религиозный. А Вы таким постами оскорбляете чувства верующих!
Плескану масла в огонь:
Это код совсем не для девочек! А потому - гнусный сексизм!
(но, плюсик - мой :-)
Плескану масла в огонь:
2000 мс стартовой задержки нет. ;)))
тогда так:
Вот это и есть истиный говнокод. Прям хоть поля удобряй ;)))))))))
Вот это и есть истиный говнокод.
Не, ну а чё миллис два раза вызывается? Он же и поменяться между вызовами может! И ваще - нестрого, перерасход ресурсов!
Тогда уж так:
Вот это и есть истиный говнокод.
Не, ну а чё миллис два раза вызывается? Он же и поменяться между вызовами может! И ваще - нестрого, перерасход ресурсов!
Тогда уж так:
Я так и хотел, не поверишь. Но переменная на стеке! Хотя лябда, бесспорно, повышает уровень говна в говнокоде! ;))))
Ну, переменная на стеке, её ещё объявить надо где-то. Кстати, лямбду можно подсократить "->uint8_t" там явное эстетство. Компилятор и сам не развалится преобразовать :-)
А тс кросаучег))) Пока титаны мерились программаторами, автор получил на халяву идеальнейший код. НЛП сплошное.
Не, я думаю, ТС вспыльчивый, но вменяемый. Просто в самом начале изучения ардуино.
Кстати, мне и самому было интересно увидеть варианты "титанов". "Намотал на ус".
в результате у меня получилось так, при условии, что OnTime < OffTime
Мне он напоминает юного студента, который вдруг познал, что он велик и пытается казаться умудренным старцем. Или так и не повзрослевшего инфантила. ИМХО.
в результате у меня получилось так, при условии, что OnTime < OffTime
Я не титан, но глянул ))
1) Константы в 1-3 строках не нужны в принципе. Каждая из них занимает два байта. Если заменить их дефайнами, то занимать не будут ничего, а на функционале не скажется
2) 17 строка - преобразование ledOn, 18 строка - обратное преобразование ledOn. Очевидно, 17 строку можно оптимизировать ))
3) Ну и собственно 18 строку можно избавить от вычислений
4) Переменная newMillis имела бы значение, если бы использовалась не только в сравнении, а и в 16 строке. Это имело бы смысл в случае, если накопление погрешности недопустимо для каких-то точных измерений, в обычном блинке это излишне. Значит и ее оптимизируем ))
Итого
С дефайнами я читал есть свои "заморочки", рекомендуют их заменить на const или constexpr (VS вот у меня рекомендует заменить на последнее, хотя не знаю ещё почему)
И тернарный оператор ТС ещё рано показывать.
У меня const ничего лишнего не отбирает у Ардуины. Перешёл с define на const, чтобы размерности переменных считались корректно. А то так в запале UL забудешь и мозги кипятишь.
Тернарный оператор с двумя присваиваиваниями волшебен, конечно: ledOn ? (onOffTime = OffTime) : (onOffTime = OnTime);
Сразу вспоминается сцена на заправке из "Бумера".
Сразу вспоминается сцена на заправке из "Бумера".
Эмм, а в чем проблема? Ну так, для самообразования ))