untested protothread timer stuff
This commit is contained in:
		
							parent
							
								
									427eb62ac4
								
							
						
					
					
						commit
						0de9d4db1e
					
				
					 7 changed files with 376 additions and 7 deletions
				
			
		| 
						 | 
					@ -9,7 +9,7 @@ MCU = atmega168
 | 
				
			||||||
F_CPU = 16000000
 | 
					F_CPU = 16000000
 | 
				
			||||||
FORMAT = ihex
 | 
					FORMAT = ihex
 | 
				
			||||||
TARGET = example
 | 
					TARGET = example
 | 
				
			||||||
SRC = example.c
 | 
					SRC = example.c timer/clock-arch.c timer/timer.c
 | 
				
			||||||
ASRC = 
 | 
					ASRC = 
 | 
				
			||||||
OPT = s
 | 
					OPT = s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ CSTANDARD = -std=gnu99
 | 
				
			||||||
CDEFS = -DF_CPU=$(F_CPU)UL
 | 
					CDEFS = -DF_CPU=$(F_CPU)UL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Place -I options here
 | 
					# Place -I options here
 | 
				
			||||||
CINCS = -Ipt
 | 
					CINCS = -Ipt 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CDEBUG = -g$(DEBUG)
 | 
					CDEBUG = -g$(DEBUG)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,10 +2,15 @@
 | 
				
			||||||
#include "util/delay.h"
 | 
					#include "util/delay.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "pt.h"
 | 
					#include "pt.h"
 | 
				
			||||||
 | 
					#include "timer/clock.h"
 | 
				
			||||||
 | 
					#include "timer/timer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Two flags that the two protothread functions use. */
 | 
					/* Two flags that the two protothread functions use. */
 | 
				
			||||||
static int protothread1_flag, protothread2_flag;
 | 
					static int protothread1_flag, protothread2_flag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Two timers for the two protothreads. */
 | 
				
			||||||
 | 
					static struct timer timer1, timer2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
protothread1(struct pt *pt)
 | 
					protothread1(struct pt *pt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -19,10 +24,11 @@ protothread1(struct pt *pt)
 | 
				
			||||||
    PT_WAIT_UNTIL(pt, protothread2_flag != 0);
 | 
					    PT_WAIT_UNTIL(pt, protothread2_flag != 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PORTB |= _BV(PB3);
 | 
					    PORTB |= _BV(PB3);
 | 
				
			||||||
    _delay_ms(200);
 | 
					    timer_set(&timer1, CLOCK_SECOND/2);
 | 
				
			||||||
 | 
					    PT_WAIT_UNTIL(pt, timer_expired(&timer1));
 | 
				
			||||||
    PORTB &= ~_BV(PB3);
 | 
					    PORTB &= ~_BV(PB3);
 | 
				
			||||||
    _delay_ms(200);
 | 
					    timer_set(&timer1, CLOCK_SECOND/2);
 | 
				
			||||||
 | 
					    PT_WAIT_UNTIL(pt, timer_expired(&timer1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* We then reset the other protothread's flag, and set our own
 | 
					    /* We then reset the other protothread's flag, and set our own
 | 
				
			||||||
       flag so that the other protothread can run. */
 | 
					       flag so that the other protothread can run. */
 | 
				
			||||||
| 
						 | 
					@ -53,9 +59,11 @@ protothread2(struct pt *pt)
 | 
				
			||||||
    PT_WAIT_UNTIL(pt, protothread1_flag != 0);
 | 
					    PT_WAIT_UNTIL(pt, protothread1_flag != 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PORTB |= _BV(PB2);
 | 
					    PORTB |= _BV(PB2);
 | 
				
			||||||
    _delay_ms(100);
 | 
					    timer_set(&timer2, CLOCK_SECOND/2);
 | 
				
			||||||
 | 
					    PT_WAIT_UNTIL(pt, timer_expired(&timer2));
 | 
				
			||||||
    PORTB &= ~_BV(PB2);
 | 
					    PORTB &= ~_BV(PB2);
 | 
				
			||||||
    _delay_ms(100);
 | 
					    timer_set(&timer2, CLOCK_SECOND/2);
 | 
				
			||||||
 | 
					    PT_WAIT_UNTIL(pt, timer_expired(&timer2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* We then reset the other protothread's flag, and set our own
 | 
					    /* We then reset the other protothread's flag, and set our own
 | 
				
			||||||
| 
						 | 
					@ -79,6 +87,9 @@ int main(void) {
 | 
				
			||||||
  // pin 10 = PB2
 | 
					  // pin 10 = PB2
 | 
				
			||||||
  DDRB |= _BV(PB2);
 | 
					  DDRB |= _BV(PB2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Initialize clock */
 | 
				
			||||||
 | 
					  clock_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Initialize the protothread state variables with PT_INIT(). */
 | 
					  /* Initialize the protothread state variables with PT_INIT(). */
 | 
				
			||||||
  PT_INIT(&pt1);
 | 
					  PT_INIT(&pt1);
 | 
				
			||||||
  PT_INIT(&pt2);
 | 
					  PT_INIT(&pt2);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										43
									
								
								projekte/protothreads/timer/clock-arch.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								projekte/protothreads/timer/clock-arch.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					// from avr-uip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <avr/interrupt.h>
 | 
				
			||||||
 | 
					#include <avr/io.h>
 | 
				
			||||||
 | 
					#include <avr/sfr_defs.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "clock-arch.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Counted time
 | 
				
			||||||
 | 
					clock_time_t clock_datetime = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Overflow itnerrupt
 | 
				
			||||||
 | 
					ISR(TIMER0_OVF_vect)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						clock_datetime += 1;
 | 
				
			||||||
 | 
						TIFR0 |= (1<<TOV0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Initialise the clock
 | 
				
			||||||
 | 
					void clock_init(){
 | 
				
			||||||
 | 
						//Activate overflow interrupt for timer0
 | 
				
			||||||
 | 
						TIMSK0 |= (1<<TOIE0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//Use prescaler 1024
 | 
				
			||||||
 | 
						TCCR0B |= ((1<<CS12)|(1<<CS10));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//Activate interrupts
 | 
				
			||||||
 | 
						sei();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Return time
 | 
				
			||||||
 | 
					clock_time_t clock_time(){
 | 
				
			||||||
 | 
						clock_time_t time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cli();
 | 
				
			||||||
 | 
						time = clock_datetime;
 | 
				
			||||||
 | 
						sei();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return time;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								projekte/protothreads/timer/clock-arch.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								projekte/protothreads/timer/clock-arch.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,14 @@
 | 
				
			||||||
 | 
					// from avr-uip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __CLOCK_ARCH_H__
 | 
				
			||||||
 | 
					#define __CLOCK_ARCH_H__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef uint16_t clock_time_t;
 | 
				
			||||||
 | 
					#define CLOCK_CONF_SECOND		(F_CPU / (1024*255))
 | 
				
			||||||
 | 
													//Freqency divided prescaler and counter register size
 | 
				
			||||||
 | 
					void clock_init(void);
 | 
				
			||||||
 | 
					clock_time_t clock_time(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* __CLOCK_ARCH_H__ */
 | 
				
			||||||
							
								
								
									
										88
									
								
								projekte/protothreads/timer/clock.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								projekte/protothreads/timer/clock.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,88 @@
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \defgroup clock Clock interface
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The clock interface is the interface between the \ref timer "timer library"
 | 
				
			||||||
 | 
					 * and the platform specific clock functionality. The clock
 | 
				
			||||||
 | 
					 * interface must be implemented for each platform that uses the \ref
 | 
				
			||||||
 | 
					 * timer "timer library".
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The clock interface does only one this: it measures time. The clock
 | 
				
			||||||
 | 
					 * interface provides a macro, CLOCK_SECOND, which corresponds to one
 | 
				
			||||||
 | 
					 * second of system time.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \sa \ref timer "Timer library"
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2004, Swedish Institute of Computer Science.
 | 
				
			||||||
 | 
					 * All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					 *    documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					 * 3. Neither the name of the Institute nor the names of its contributors
 | 
				
			||||||
 | 
					 *    may be used to endorse or promote products derived from this software
 | 
				
			||||||
 | 
					 *    without specific prior written permission.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
				
			||||||
 | 
					 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
				
			||||||
 | 
					 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
				
			||||||
 | 
					 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
				
			||||||
 | 
					 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
				
			||||||
 | 
					 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
				
			||||||
 | 
					 * SUCH DAMAGE.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of the uIP TCP/IP stack
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Author: Adam Dunkels <adam@sics.se>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef __CLOCK_H__
 | 
				
			||||||
 | 
					#define __CLOCK_H__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "clock-arch.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Initialize the clock library.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This function initializes the clock library and should be called
 | 
				
			||||||
 | 
					 * from the main() function of the system.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void clock_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Get the current clock time.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This function returns the current system clock time.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \return The current clock time, measured in system ticks.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					clock_time_t clock_time(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A second, measured in system clock time.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \hideinitializer
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef CLOCK_CONF_SECOND
 | 
				
			||||||
 | 
					#define CLOCK_SECOND CLOCK_CONF_SECOND
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define CLOCK_SECOND (clock_time_t)32
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* __CLOCK_H__ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @} */
 | 
				
			||||||
							
								
								
									
										127
									
								
								projekte/protothreads/timer/timer.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								projekte/protothreads/timer/timer.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,127 @@
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \addtogroup timer
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \file
 | 
				
			||||||
 | 
					 * Timer library implementation.
 | 
				
			||||||
 | 
					 * \author
 | 
				
			||||||
 | 
					 * Adam Dunkels <adam@sics.se>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2004, Swedish Institute of Computer Science.
 | 
				
			||||||
 | 
					 * All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					 *    documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					 * 3. Neither the name of the Institute nor the names of its contributors
 | 
				
			||||||
 | 
					 *    may be used to endorse or promote products derived from this software
 | 
				
			||||||
 | 
					 *    without specific prior written permission.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
				
			||||||
 | 
					 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
				
			||||||
 | 
					 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
				
			||||||
 | 
					 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
				
			||||||
 | 
					 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
				
			||||||
 | 
					 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
				
			||||||
 | 
					 * SUCH DAMAGE.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of the uIP TCP/IP stack
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Author: Adam Dunkels <adam@sics.se>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "timer/clock.h"
 | 
				
			||||||
 | 
					#include "timer/timer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*---------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Set a timer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This function is used to set a timer for a time sometime in the
 | 
				
			||||||
 | 
					 * future. The function timer_expired() will evaluate to true after
 | 
				
			||||||
 | 
					 * the timer has expired.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \param t A pointer to the timer
 | 
				
			||||||
 | 
					 * \param interval The interval before the timer expires.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					timer_set(struct timer *t, clock_time_t interval)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  t->interval = interval;
 | 
				
			||||||
 | 
					  t->start = clock_time();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/*---------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Reset the timer with the same interval.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This function resets the timer with the same interval that was
 | 
				
			||||||
 | 
					 * given to the timer_set() function. The start point of the interval
 | 
				
			||||||
 | 
					 * is the exact time that the timer last expired. Therefore, this
 | 
				
			||||||
 | 
					 * function will cause the timer to be stable over time, unlike the
 | 
				
			||||||
 | 
					 * timer_rester() function.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \param t A pointer to the timer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \sa timer_restart()
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					timer_reset(struct timer *t)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  t->start += t->interval;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/*---------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Restart the timer from the current point in time
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This function restarts a timer with the same interval that was
 | 
				
			||||||
 | 
					 * given to the timer_set() function. The timer will start at the
 | 
				
			||||||
 | 
					 * current time.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \note A periodic timer will drift if this function is used to reset
 | 
				
			||||||
 | 
					 * it. For preioric timers, use the timer_reset() function instead.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \param t A pointer to the timer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \sa timer_reset()
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					timer_restart(struct timer *t)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  t->start = clock_time();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/*---------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Check if a timer has expired.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This function tests if a timer has expired and returns true or
 | 
				
			||||||
 | 
					 * false depending on its status.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \param t A pointer to the timer
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \return Non-zero if the timer has expired, zero otherwise.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int
 | 
				
			||||||
 | 
					timer_expired(struct timer *t)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/*---------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @} */
 | 
				
			||||||
							
								
								
									
										86
									
								
								projekte/protothreads/timer/timer.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								projekte/protothreads/timer/timer.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \defgroup timer Timer library
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The timer library provides functions for setting, resetting and
 | 
				
			||||||
 | 
					 * restarting timers, and for checking if a timer has expired. An
 | 
				
			||||||
 | 
					 * application must "manually" check if its timers have expired; this
 | 
				
			||||||
 | 
					 * is not done automatically.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * A timer is declared as a \c struct \c timer and all access to the
 | 
				
			||||||
 | 
					 * timer is made by a pointer to the declared timer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \note The timer library uses the \ref clock "Clock library" to
 | 
				
			||||||
 | 
					 * measure time. Intervals should be specified in the format used by
 | 
				
			||||||
 | 
					 * the clock library.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \file
 | 
				
			||||||
 | 
					 * Timer library header file.
 | 
				
			||||||
 | 
					 * \author
 | 
				
			||||||
 | 
					 * Adam Dunkels <adam@sics.se>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2004, Swedish Institute of Computer Science.
 | 
				
			||||||
 | 
					 * All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions
 | 
				
			||||||
 | 
					 * are met:
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 * 2. Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					 *    notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					 *    documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					 * 3. Neither the name of the Institute nor the names of its contributors
 | 
				
			||||||
 | 
					 *    may be used to endorse or promote products derived from this software
 | 
				
			||||||
 | 
					 *    without specific prior written permission.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 | 
				
			||||||
 | 
					 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
				
			||||||
 | 
					 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
				
			||||||
 | 
					 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 | 
				
			||||||
 | 
					 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
				
			||||||
 | 
					 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
				
			||||||
 | 
					 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
				
			||||||
 | 
					 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
				
			||||||
 | 
					 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
				
			||||||
 | 
					 * SUCH DAMAGE.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of the uIP TCP/IP stack
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Author: Adam Dunkels <adam@sics.se>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef __TIMER_H__
 | 
				
			||||||
 | 
					#define __TIMER_H__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "timer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A timer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This structure is used for declaring a timer. The timer must be set
 | 
				
			||||||
 | 
					 * with timer_set() before it can be used.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \hideinitializer
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct timer {
 | 
				
			||||||
 | 
					  clock_time_t start;
 | 
				
			||||||
 | 
					  clock_time_t interval;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void timer_set(struct timer *t, clock_time_t interval);
 | 
				
			||||||
 | 
					void timer_reset(struct timer *t);
 | 
				
			||||||
 | 
					void timer_restart(struct timer *t);
 | 
				
			||||||
 | 
					int timer_expired(struct timer *t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* __TIMER_H__ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @} */
 | 
				
			||||||
		Reference in a new issue