Великое переполнение millis()

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

Ого! Неожиданно! Не думал, что ардуинщики сундук смотрят )))

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

ua6em пишет:

Ого! Неожиданно! Не думал, что ардуинщики сундук смотрят )))

Не только сундук.  Я еще после мухаморов ковёр смотрю.  Оч. познавательна. 

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

sva_khv, видимо православный человек? Идеи явно оттуда :))) Вот в теме есть ссылка на учебник, так там автор вообще предлагает тем, кто утверждает, что мнимые величины существуют, зарплату ими выплачивать.

bwn
Offline
Зарегистрирован: 25.08.2014

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

автор вообще предлагает тем, кто утверждает, что мнимые величины существуют, зарплату ими выплачивать.

Ценнейшее предложение, а главное, моск прочищает моментально.))))

sva_khv
Offline
Зарегистрирован: 19.12.2016

bwn пишет:

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

автор вообще предлагает тем, кто утверждает, что мнимые величины существуют, зарплату ими выплачивать.

Ценнейшее предложение, а главное, моск прочищает моментально.))))

Раньше я думал что физического воплощения отрицательных чисел не увижу в природе. А сейчас глядя на овердрафт по карте с грустью понимаю что ошибался! А по просроченым кредитам можно не только отрицательные числа наблюдать, но и получить вполне реальную отрицателную кинетическую энергию!  

sva_khv
Offline
Зарегистрирован: 19.12.2016

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

sva_khv, видимо православный человек? Идеи явно оттуда

Нет, просто мне что-бы разобраться в чем нибуть надо потрогать это руками, разобрать, собрать(если получиться  :-).   Или хотя бы придумать аналогию.  Вот мнимые числа и фейк ньюс - хорошая аналогия!

Logik
Offline
Зарегистрирован: 05.08.2014

А че там придумывать, мнимые  - они везде. Заказали с китая ардуинку - она мнимая (деньги заплатил, вроде как есть, а пощупать и залить прогу некуда), услуги почты тоже мнимые - кто их вобще в руках держал?! А их произведение может оказатся реальной ардуиной. Если конечно оба множителя отличны от нуля ;)

maxvalin
Offline
Зарегистрирован: 22.02.2016

Да вы что издеваетесь!?

Где тот админ?!
Ну сколько можно!
Уже ни один способ не работет избавиться от уведомлений.

sva_khv
Offline
Зарегистрирован: 19.12.2016

maxvalin пишет:
Уже ни один способ не работет избавиться от уведомлений.

А это потому что уведомления это мнимые величины. Их не существует. А от того что не существует - избавиться нельзя!  :-))))

maxvalin
Offline
Зарегистрирован: 22.02.2016

Это уж точно)))
Простите все если чем обидел и я не держу зла))
Даже на этот неубиваемый деревянный движек форума.
Всех с праздником прощального воскресения.

sadman41
Offline
Зарегистрирован: 19.10.2016

maxvalin пишет:
Да вы что издеваетесь!? Где тот админ?! Ну сколько можно! Уже ни один способ не работет избавиться от уведомлений.

Работает. Надо просто настойчивей отписываться: в кажном уведомлении тыкать на "отписаться". Через некоторое время уведомления перестанут приходить. И главное (!) - не ставить галочку под камментом.

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

sva_khv пишет:
что-бы разобраться в чем нибуть надо потрогать это руками

Ну, руками Вы не можете потрогать никакие числа. Любое число - это только математическая абстракция.

sva_khv пишет:

Или хотя бы придумать аналогию.  Вот мнимые числа и фейк ньюс - хорошая аналогия!

Никакая аналогия. Вообще никакая. Какими именно свойствами комплесных чисел обладаю фейк ньюс? Никакими.

Если Вам нужно что-то представлять в уме, так и представляйте. Действительное число - точка на прямой. Комплексное число - точка на двумерной плоскости. Чего тут представлять-то?

kolyn
Offline
Зарегистрирован: 18.01.2019

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

двумерной плоскости

  Разрешите съязвить. А разве бывают другие, к примеру, трехмерные ПЛОСКОСТИ? :-))

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:
Если Вам нужно что-то представлять в уме, так и представляйте. Действительное число - точка на прямой. Комплексное число - точка на двумерной плоскости. Чего тут представлять-то?
Вот возьмем пример . Надо построить что-то на государсвенном уровне. Есть план, есть бюджет. Результат. Недострой. Почему ? денег не хватило. А куда пошли деньги которых не хватило. Налево. То есть в мнимую часть. По модулю денег хватает, а по факту не хватило. На действительную часть и построили. Скорее всего проектировщики не знакомы с комплексными числами и не учли расходы на мнимую часть. Тем более мнимая часть она конечно мнимая, а без учета ее влияния ничего не получтся реализовать.

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

kolyn пишет:

А разве бывают другие, к примеру, трехмерные ПЛОСКОСТИ? :-))

На школьному уровне - нет, а вообще, конечно бывают. Сколько-угодномерные.  Изучайте, если интересно.

kolyn
Offline
Зарегистрирован: 18.01.2019

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

а вообще, конечно бывают. Сколько-угодномерные.  Изучайте, если интересно.

  "Многие знания - многие печали".  Но таки да, нос утерли!

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

На школьному уровне - нет, а вообще, конечно бывают. Сколько-угодномерные.  Изучайте, если интересно.

Не "сколько угодоно", а хотя бы на единицу меньше размерности пространства.

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

Смотрю, вы тут за высшие материи беседуете. Тогда и я на правах оффтопа...

sva_khv пишет:

- Что там сегодня по телевизору?
- Комплексные числа!

Комплексные числа не только по телевизору показывают, но и в этих ваших ютубах: 
https://www.youtube.com/watch?v=xavhQ-uLOG0
https://www.youtube.com/watch?v=rEjF60aPRhg

arduinec
Offline
Зарегистрирован: 01.09.2015

Комплексные числа удобны при расчёте реактивных сопротивлений (сопротивление ёмкости и индуктивности при переменном напряжении): https://ru.wikipedia.org/wiki/Реактивное_сопротивление

Logik
Offline
Зарегистрирован: 05.08.2014

Не токо сопротивление. В энергетике весь расчет режима электросети в комплексных. Огромные нелинейные системы уравнений 10^5 порядка и выше. Потому там так долго фортран любили.

dishin-di
Offline
Зарегистрирован: 09.04.2019

Правильно ли я понимаю, что выполнение программы приостанавливается на while?
И если это так, тогда чем это решение лучше обычного delay?

Я хочу использовать millis так, чтобы остальная часть программы выполнялась, пока в нужном куске программы значение millis сравнивается со стартовым значением, тем самым обеспечивая задержку. 
Например:

Система управления насосом и вентилятором. Оба включаются на определенный промежуток времени, но по разным условиям. 

Условия включения одного должны перепроверяться, пока включен другой. 

Предлагаю к критике следующий код обработки переполнения millis. На входе функции - необходимая задержка. На выходе - значение, которое надо сравнивать с  millis, дабы поймать момент окончания задержки.

unsigned long upgradeMillis(unsigned long zad){
  if ((millis()+zad)>=4294967295) {
    unsigned long pered = (millis()+zad)-4294967295;
  } else {
    pered = millis();
  }
  return pered;
}

Как вам?

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

dishin-di пишет:

Правильно ли я понимаю, что выполнение программы приостанавливается на while?

Какой именно программы?

dishin-di пишет:

Предлагаю к критике следующий код обработки переполнения millis. ... 

<неперводимая игра слов> !!!

Весь этот топик посвящёт том, не нужна никакая обработка переполнения миллис. Не нужна от слова "нахрен не нужна", Никакая - от слова "ну ваще, совсем не надо обрабатывать".

dishin-di пишет:

Как вам?

Молодые матросы точат якоря, кот на подоконнике лижет яйца, а ардуинщики борются с переполнением миллис. Как-то так.

dishin-di
Offline
Зарегистрирован: 09.04.2019

Той, что в первом сообщении в топике.

Не нужна она в данном конкретном случае:)
В том, что в первом сообщении в топике. 

dishin-di
Offline
Зарегистрирован: 09.04.2019

Чтобы продолжить конструктивный диалог нужно разобраться, приостанавливается ли выполнение программы на while или нет

dishin-di
Offline
Зарегистрирован: 09.04.2019

Все. Я все понял. Молчу:)

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

dishin-di пишет:

Той, что в первом сообщении в топике.

Там блокирующий while, сделанный специально, чтобы остановить работу программы. Можно делать неблокирующий, чтобы программа работала - это никак не связано с переполнением миллис.

dishin-di пишет:

Чтобы продолжить конструктивный диалог

Конструктивный диалог по проблеме переполнения миллис невозможен ввиду отсутствия таковой проблемы, т.е. предмета диалога.

"Проблема" переполнения миллис - исключительно связана с недостаточным уровнем грамотности разработчика. Читайте первое сообщение темы и делайте то, что там написано (изучайте арифметику, решайте задачи). И делайте это до тех пор, пока не поймёте - нет проблемы переполнения миллис - есть проблема уровня грамотности программистов.

dishin-di
Offline
Зарегистрирован: 09.04.2019

Всёвсё, вопрос снят:)
После первой задачи стало понятно, куда надо копать:)

 

Спасибо:)

sadman41
Offline
Зарегистрирован: 19.10.2016

Не знаю, куда запостить - то ли в юмор, то ли ещё куда. Вот вы Гувера ругаете всё... а посмотрите, что я в UIPEthernet нашёл в процесс разборок с неустойчивым коннектом ENC28J60 на внешний хост:

UIPClient::connect(IPAddress ip, uint16_t port)
...
#if UIP_CONNECT_TIMEOUT > 0
      int32_t timeout = millis() + 1000 * UIP_CONNECT_TIMEOUT;
#endif
...
#if UIP_CONNECT_TIMEOUT > 0
          if (((int32_t)(millis() - timeout)) > 0)
            {
              conn->tcpstateflags = UIP_CLOSED;
              break;
            }
#endif
...
}

 

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

sadman41 пишет:

Не знаю, куда запостить - то ли в юмор, то ли ещё куда. Вот вы Гувера ругаете всё... а посмотрите, что я в UIPEthernet нашёл в процесс разборок с неустойчивым коннектом ENC28J60 на внешний хост:

UIPClient::connect(IPAddress ip, uint16_t port)
...
#if UIP_CONNECT_TIMEOUT > 0
      int32_t timeout = millis() + 1000 * UIP_CONNECT_TIMEOUT;
#endif
...
#if UIP_CONNECT_TIMEOUT > 0
          if (((int32_t)(millis() - timeout)) > 0)
            {
              conn->tcpstateflags = UIP_CLOSED;
              break;
            }
#endif
...
}

 

а что, даже сутки не продержится?

А Гайвер всё таки популяризатор )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Сутки продержится. А вот где-то через 24 дня, полагаю, можно ожидать странного поведения, если удалённый хост начнёт тупить с SYN ACK. У меня проблема схожего плана была, поэтому и полез смотреть, что в ::connect() происходит.

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

sadman41 пишет:

Сутки продержится. А вот где-то через 24 дня, полагаю, можно ожидать странного поведения, если удалённый хост начнёт тупить с SYN ACK. У меня проблема схожего плана была, поэтому и полез смотреть, что в ::connect() происходит.

добавить процедурку, если дисконнект длится более 10 минут ребутить не пойдёт?
Или править )))

sadman41
Offline
Зарегистрирован: 19.10.2016

Может и пойдет. Иллюстрация-то не к обработке экцепшна, а к тому, что в драйвере, которому уж лет 10 и читан который не раз (даже попал под форк с дальнейшим развитием в MBED) - такой вот ляпсус.

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

sadman41 пишет:

которому уж лет 10 и читан который не раз (даже попал под форк с дальнейшим развитием в MBED) - такой вот ляпсус.

Да, ладно, и не такое бывает. Я тут как-то приводил интересный факт об ошибке в весьма критичном программном обеспечении. Почитайте вот здесь от фразы "Возможно, кому-то проблема накопления погрешности покажется искусственной"

MacSim
Offline
Зарегистрирован: 28.11.2012

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