Ви не увійшли.
typedef enum {
TIMER_EXE = 0,
TIMER_DISABLED = 1,
TIMER_RUN = 2,
}TE_TIMER;
объявление
а то не соберется пример
мой код понятен ?
упс. то я прогнал
я имел ввиду отнять 10 заговорился
"отнять минус 10. " это - (-10)
не удержался )
я так делаю
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 значение на которое нужно уменьшить счетчик
}
хитрость просто в том, что у меня в цикле та самая timeToBegin может дополнительно уменьшаться по определенным условиям
спасибо за ответ
я про уловку понял
у меня уловка по сути такая же:
long delta = millis() - modeStartedAt;
if (timeToBegin > delta) {
timeToBegin -= delta;//уменьшаем время до старта
modeStartedAt = millis();
} else {
timeToBegin = 0;
}
вот только не понял причем тут 1 - (-10)
у меня ведь вопрос в: unsigned long var = 1-10 = ?
"unsigned long равный 1 отнять минус 10. что будет? "
(unsigned long )1 - (-10) = 11 %)
temp = millis();
if (temp > modeStartedAt )
{
timeToBegin = millis() - modeStartedAt;
}
else
timeToBegin = 0;
код не читаемый (
по телу вопроса написал пример
долго думал как назвать тему буду краток
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 отработает неверно?
я могу выкрутиться по другому, но хочется понять, как оно отработает на аппаратном уровне