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