@@ -69,13 +69,7 @@ void TTimerList::Init()
6969TTimerList::TTimerList ()
7070{
7171 count = 0 ;
72- for (byte i = 0 ; i < MAXTIMERSCOUNT ; i++) // первоначальная инициализация, заполнение списка нулями
73- {
74- Items[i].CallingFunc = NULL ;
75- Items[i].InitCounter = 0 ;
76- Items[i].WorkingCounter = 0 ;
77- Items[i].Active = false ;
78- }
72+ memset (Items,0 ,sizeof (Items[0 ])*MAXTIMERSCOUNT );
7973 active = false ;
8074}
8175
@@ -146,20 +140,22 @@ void TTimerList::Delete(THandle hnd) // удалить тайм
146140
147141void TTimerList::Step (void )
148142{
149- if (NOT active) return ; // если все таймеры остановлены, то и смысла нет
143+ if (NOT active) return ; // если все таймеры остановлены, то и смысла нет
144+
145+ byte sreg = SREG ; // запомним состояние прерываний
146+ cli (); // чтоб никто не помешал изменить интервалы, запрещаем прерывания
147+
150148 // сопсно рабочий цикл
151149 for (THandle i = 0 ; i < MAXTIMERSCOUNT ; i++) // пробегаем по всему списку таймеров
152150 {
153- byte sreg = SREG ; // запомним состояние прерываний
154- cli (); // чтоб никто не помешал изменить интервалы, запрещаем прерывания
155- if (Items[i].CallingFunc == NULL ) continue ; // если функция-обрабоччик не назначена, уходим на следующий цикл
156- if ( NOT Items[i]. Active ) continue ; // если таймер остановлен - тоже
157- if (-- Items[i].WorkingCounter > 0 ) continue ; // уменьшаем на 1 рабочий счетчик
151+ if (Items[i]. CallingFunc == NULL ) continue ; // если функция-обрабоччик не назначена, уходим на следующий цикл
152+ if ( NOT Items[i]. Active ) continue ; // если таймер остановлен - тоже
153+ if (-- Items[i].WorkingCounter > 0 ) continue ; // уменьшаем на 1 рабочий счетчик
154+
155+ Items[i].CallingFunc (); // если достиг 0, вызываем функцию-обработчик
158156 Items[i].WorkingCounter = Items[i].InitCounter ; // и записываем в рабочий счетчик начальное значение для счета сначала
159- sei ();
160- Items[i].CallingFunc (); // если достиг 0, вызываем функцию-обработчик
161- SREG = sreg; // теперь и прерывания можно восстановить как было
162- }
157+ } // прерывания ЗАПРЕЩЕНЫ
158+ SREG = sreg; // теперь и прерывания можно восстановить как было
163159}
164160
165161void TTimerList::AllStart ()
0 commit comments