Глюки unsigned long или проблема с головой

Slod
Offline
Зарегистрирован: 30.01.2019

Всех приветствую. Что-то я начинаю сомневаться в своей адекватности...

Вот код:

void setup() {
  Serial.begin(9600);
  delay(500);
}

unsigned long delaymillis = 0;
unsigned long endmillis = 0;

void loop() {
  delaymillis = 60 * 1000;
  endmillis = delaymillis + millis();
  Serial.print(delaymillis);
  Serial.print(" ");
  Serial.print(endmillis);
  Serial.print(" ");
  Serial.print(millis());
  Serial.println(" ");
  delay(1000);
}

А вот данные из порта:

4294961760 4294962259 500 
4294961760 4294963260 1501 
4294961760 4294964261 2502 
4294961760 4294965263 3504 
4294961760 4294966264 4505 
4294961760 4294967265 5506 
4294961760 970 6507 
4294961760 1970 7507 
4294961760 2972 8509 
4294961760 3972 9509 
4294961760 4974 10510 
4294961760 5974 11511 
4294961760 6976 12512 
4294961760 7976 13513 

Что я делаю не так? Готов застрелиться уже...

rkit
Offline
Зарегистрирован: 23.11.2016

delaymillis = 60ul * 1000ul;

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Это ловушка для всех новичков:)   (int)60*1000 = -5536;  2^32 - 5536 = 4294961760

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

строчку 10 вот так запиши и все наладится

delaymillis = 60 * 1000ul;

 

Slod
Offline
Зарегистрирован: 30.01.2019

Всем премного благодарен. Раньше что-то не сталкивался просто с ul. Открыли глаза и сэкономили патрон ))

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Спасибо всем, кто спросил и ответил получилось очень полезно

inspiritus
Offline
Зарегистрирован: 17.12.2012

Я тут недавно марахнулся. Переменная - счетчик запусков отчеготто обозвалась булинем, потом долго удивлялся, почему он дальше 1 не суммирует. О вреде маленьких экранов.

vkis
Offline
Зарегистрирован: 15.04.2021

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

вместо delaymillis = 60 * 1000; просто delaymillis = 60000;

rkit
Offline
Зарегистрирован: 23.11.2016

не грузит, компилятор оптимизирует константные вычисления

vkis
Offline
Зарегистрирован: 15.04.2021

rkit пишет:

не грузит, компилятор оптимизирует константные вычисления

потому и из ада перфекциониста. сокращаем время компиляции :-)

Slod
Offline
Зарегистрирован: 30.01.2019

vkis пишет:

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

вместо delaymillis = 60 * 1000; просто delaymillis = 60000;

Это было просто для примера. 60 - это вместо переменной