uIP 1.0
C:/asm/STM32-ethernet/ENC28J60prj/uip-master/uip/timer.c
См. документацию.
00001 /**
00002  * \addtogroup timer
00003  * @{
00004  */
00005 
00006 /**
00007  * \file
00008  * Библиотечная реализация таймера.
00009  * \author
00010  * Adam Dunkels <adam@sics.se>
00011  */
00012 
00013 /*
00014  * Copyright (c) 2004, Swedish Institute of Computer Science.
00015  * Все права зарезервированы. *
00016  * Повторное распространение, использование в исходном и двоичном виде,
00017  * с модификацией или без - разрешается, если выполняются следующие
00018  * условия:
00019  * 1. Распространение исходного кода должно сохранить вышеуказанную пометку
00020  *    копирайта, этот список условий и следующую правовую оговорку.
00021  * 2. Распространение исходного кода должно сохранить вышеуказанную пометку
00022  *    копирайта, этот список условий и следующую правовую оговорку в
00023  *    документации и/или других материалах, которые будут предоставлены
00024  *    вместе с распространяемыми материалами.
00025  * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть
00026  *    продукты, написанные с использованием этого программного обеспечения
00027  *    без специального на то разрешения.
00028  *
00029  * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ
00030  * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ,
00031  * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ
00032  * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН
00033  * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ
00034  * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ
00035  * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ;
00036  * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ,
00037  * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ
00038  * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ
00039  * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ
00040  * ТАКОГО ПОВРЕЖДЕНИЯ.
00041  *
00042  * Этот файл является частью стека uIP TCP/IP.
00043  *
00044  * Author: Adam Dunkels <adam@sics.se>
00045  *
00046  * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $
00047  */
00048 
00049 #include "clock.h"
00050 #include "timer.h"
00051 
00052 /*---------------------------------------------------------------------------*/
00053 /**
00054  * Установка таймера.
00055  *
00056  * Эта функция используется для установки таймера на некоторое время
00057  * в будущем. Функция timer_expired() будет вычислена как true после
00058  * того, как время таймера истечет.
00059  *
00060  * \param t Указатель на таймер
00061  * \param interval Интервал времени, на которое настроен таймер.
00062  *
00063  */
00064 void
00065 timer_set(struct timer *t, clock_time_t interval)
00066 {
00067   t->interval = interval;
00068   t->start = clock_time();
00069 }
00070 /*---------------------------------------------------------------------------*/
00071 /**
00072  * Сброс таймера на тот же самый интервал времени.
00073  *
00074  * Эта функция запускает таймер заново на тот же интервал, который был
00075  * установлен функцией timer_set(). Стартовая точка интервала та же самая,
00076  * которая была в тот момент, когда таймер последний раз истек. Таким
00077  * образом, функция делает таймер стабильным во времени, в отличие от
00078  * функции timer_restart().
00079  *
00080  * \param t Указатель A pointer to the timer.
00081  *
00082  * \sa timer_restart()
00083  */
00084 void
00085 timer_reset(struct timer *t)
00086 {
00087   t->start += t->interval;
00088 }
00089 /*---------------------------------------------------------------------------*/
00090 /**
00091  * Рестарт таймера от текущей точки времени.
00092  *
00093  * Эта функция перезапускает таймер на тот же интервал, который был
00094  * установлен вызовом функции timer_set(). Таймер запустится начиная с
00095  * текущего времени.
00096  *
00097  * \note Периодический таймер имеет дрожание интервала, если эта функция
00098  * используется для его сброса. Для периодических таймеров вместо этой 
00099  * функции используйте функцию timer_reset().
00100  *
00101  * \param t Указатель на таймер.
00102  *
00103  * \sa timer_reset()
00104  */
00105 void
00106 timer_restart(struct timer *t)
00107 {
00108   t->start = clock_time();
00109 }
00110 /*---------------------------------------------------------------------------*/
00111 /**
00112  * Проверка - истек ли интервал таймера.
00113  *
00114  * Эта функция проверяет, истек ли таймер, и возвратит true (истек) или
00115  * false (еще не истек) в зависимости от его состояния.
00116  *
00117  * \param t Указатель на таймер.
00118  *
00119  * \return Не 0, если установленное время таймера истекло, иначе 0.
00120  *
00121  */
00122 int
00123 timer_expired(struct timer *t)
00124 {
00125   return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval;
00126 }
00127 /*---------------------------------------------------------------------------*/
00128 
00129 /** @} */