Ви не увійшли.
долго думал как назвать тему буду краток
1. есть переменная unsigned long timeToBegin = 10800000; //1000*60*60*3 //3 часа
2. условно говоря когда нажимаем кнопку то засекается время старта unsigned long modeStartedAt
3. timeToBegin уменьшается в цикле loop вот так: timeToBegin = millis() - modeStartedAt;
4. потом идет проверка:
if (timeToBegin > 0) {//еще не время?
break;
} else {
timeToBegin = 0;
}
5. цикл может длиться 1мс, а может и 2 сек, то есть теоретически когда timeToBegin станет 1, а в следующем цикле окажется, что millis() - modeStartedAt меньше нуля - то что будет со значением присвоенным timeToBegin?
получается что от беззнаковому числу пытаются присвоить минусовое значение. получается что моя проверка на > 0 отработает неверно?
я могу выкрутиться по другому, но хочется понять, как оно отработает на аппаратном уровне
Остання редакція kolio (2016-03-31 16:54:07)
Неактивний
"unsigned long равный 1 отнять минус 10. что будет? "
(unsigned long )1 - (-10) = 11 %)
temp = millis();
if (temp > modeStartedAt )
{
timeToBegin = millis() - modeStartedAt;
}
else
timeToBegin = 0;
код не читаемый (
по телу вопроса написал пример
Неактивний
спасибо за ответ
я про уловку понял
у меня уловка по сути такая же:
long delta = millis() - modeStartedAt;
if (timeToBegin > delta) {
timeToBegin -= delta;//уменьшаем время до старта
modeStartedAt = millis();
} else {
timeToBegin = 0;
}
вот только не понял причем тут 1 - (-10)
у меня ведь вопрос в: unsigned long var = 1-10 = ?
Остання редакція kolio (2016-03-31 17:20:18)
Неактивний
я так делаю
TE_TIMER programm_count_down_ulong ( unsigned long *timer , unsigned short shift )
{
if (*timer > 0 )
{
if (*timer > shift )
{
*timer -= shift;
return TIMER_RUN;
}
else
{
*timer = 0;
return TIMER_EXE;
}
}
return TIMER_DISABLED;
}
if ( TIMER_EXE == programm_count_down_ulong ( &Time_Next_effect, time ))
{
Executed ();
// на выполнение когда счетчик дошел до нуля
где time значение на которое нужно уменьшить счетчик
}
Неактивний