DiHALT тоже запутался в миллис?

b707
Offline
Зарегистрирован: 26.05.2017

я привык считать материалы Di Halt с easyelectronic образцом для подражания...

Но в его свежем (2018) уроке про таймеры неожиданно наткнулся на кусок кода, где он борется с переполнением миллис, как наивный новичок:

bool MainTimerIsExpired(const uint32_t Timer)
{
  return ((TimeMs - Timer) < (1UL << 31));
}
 
 
uint32_t MainTimerRemainingMs(const uint32_t Timer)
{
    if ((TimeMs - Timer) > (1UL < < 31))
    {
        return (Timer - TimeMs);
    }
    else
    {
        return 0;
    }
}

и пояснение от автора:

Конечно, можно взять да бабахнуть сразу uint64_t на все таймерные переменные и запаса тиков до переполнения нам там хватит на пол миллиарда лет. Но вдруг вы хотите прожить дольше? В конце концов, что такое пол миллиарда лет по сравнению с вечностью? Вот и я про то же!

Поэтому будем разбираться с переполнением. И вычитать мы будем большее из меньшего, а разницу сравнивать с максимально большим отрицательным числом, как если бы мы имели дело со знаковой арифметикой.

Еще больше интересного - в комментариях к уроку...

Что это? У Di Halt уже маразм? или это я чего-то не понял?

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

"и на старуху бывает проруха"

Green
Offline
Зарегистрирован: 01.10.2015

Просто он первый раз с этим столкнулся и сходу не просёк. С кем не бывает.

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Просто он первый раз с этим столкнулся и сходу не просёк. С кем не бывает.

первый раз столкнулся? - да он о программировании МК пишет статьи уже лет десять, как мне кажется

 

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

видимо с математикой не очень дружит ...

Green
Offline
Зарегистрирован: 01.10.2015

b707 пишет:

первый раз столкнулся? - да он о программировании МК пишет статьи уже лет десять, как мне кажется


Первый раз столкнулся с арифметикой uint.) А то что мужик он грамотный - без сомнения.

Green
Offline
Зарегистрирован: 01.10.2015

Кстати, зачастую легче использовать сис тик, нежели миллис. И никакой арифметики, кроме инкремента/декремента.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Никогда не слышал об этом авторе. А что до миллиса, я же говорил, что эта тема бессмертна, как Вечный Жид. Бывает, чё.

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Никогда не слышал об этом авторе.

ни может быть! Может я как-то исказил его ник? Ну DiHalt же, с easyelectronic.ru, пишет статьи об МК уже лет этак десять. На нашем форуме куча ссылок на него... в поиске 6 страниц результатов

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я на ём учился. :) благоговею и преклоняюсь, чо бы там rkit не говорил. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Как-то мимо меня проскочило

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Как-то мимо меня проскочило

Вы не одиноки...сейчас в пространные рассуждения можно впасть... )))
PS Мне видимо еще рано

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

У него еще блог есть.
http://dihalt.ru/
До изи электоникса был.
Когда-то постоянно читал.
Сейчас вяленький, но всё равно интересно.

ЧБ
Offline
Зарегистрирован: 26.09.2020

b707 пишет:

я привык считать материалы Di Halt с easyelectronic образцом для подражания...

Но в его свежем (2018) уроке про таймеры неожиданно наткнулся на кусок кода, где он борется с переполнением миллис, как наивный новичок:


Что это? У Di Halt уже маразм? или это я чего-то не понял?

 

А как  правильно ?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЧБ пишет:

b707 пишет:

я привык считать материалы Di Halt с easyelectronic образцом для подражания...

Но в его свежем (2018) уроке про таймеры неожиданно наткнулся на кусок кода, где он борется с переполнением миллис, как наивный новичок:


Что это? У Di Halt уже маразм? или это я чего-то не понял?

 

А как  правильно ?

правильно отнимать и делить )))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

ЧБ пишет:

А как  правильно ?

Вот тут всё разжевано - http://arduino.ru/forum/programmirovanie/velikoe-perepolnenie-millis

ЧБ
Offline
Зарегистрирован: 26.09.2020

ааа, вот спасибо!

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