mazur (11.01.2011 08:28 - 08:30, просмотров: 4366)
Есть вопросик о таймерах. До этого я делал библиотеку таймеров, таймеры работали следующим образом: Двухбайтный системный счетчик в прерывании. И очередь двухбайтных таймеров требуемого количества. Выставлял таймеры следующим образом:
Set_Timer.
Считываем значение системного таймера, прибавляем к этому значению нужное время и записываем в очередь.
Проверял время следующим образом:
Check_Time_Out.
Сброс флага "TIME_OUT_FLG"
Считываем значение системного таймера, сравниваем со значением таймера из очереди. Если равно или больше, время вышло. Устанавливаем флаг "TIME_OUT_FLG". Но случаев "больше" у меня пока еще никогда не было.
Нашел статью Татарчевского о глобальных таймерах. Там у каждого таймера свое состояние. Не запущен, запущен, приостановлен, продолжение работы.
Отличная вещь. Например, когда нужно приостановить какие-либо процессы, приостанавливаем нужные таймеры и значения времен никуда не теряются.
Попытался примерить глобальные таймеры к своим программам. И увидел некоторые моменты. Есть процессы, которым глобальные таймеры не нужно. Ну шикарно для них писать таймеры со своими автоматами. Достаточно вышеупомянутых. Также есть процессы, в которых таймеры работают всегда. Например, опрос клавиатуры-кнопок, вывод сообщений на дисплей.
В общем, я решил использовать таймеры обоих типов. Это первое. Второе. Немного модифицировать, добавить функции на увеличение-на уменьшение. Третье, так как с Си у меня не очень, в примерах на Си я не мог понять этого момента. Ну жирно каждый раз вызывать макрос-подпрограмму проверки таймера, считывать значение, проверять с константой или с системным таймером.
Да забыл упомянуть следующий момент. Если все таймеры обрабатывать в прерывании, то на это прерывание уйдет много времени. Поэтому планирую в прерывании работает только счетчик. Вынести подпрограмму обработки таймеров в основной цикл. И основной цикл начинается с подпрограммы обработки таймеров. Для каждого таймера свой флаг "Время вышло". Вы писали, что при параллельных автоматах все процессы разбиваются так, чтобы работа всех автоматов и подпрограмм не превысила определенного порога времени (системного тика). Временной режим все равно при таких таймерах мягкий, так что должно проконать.
Что скажете?