From 6cc85032cb23a378bfbdd57b5f2323b077e774ea Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 12 Jul 1995 20:44:47 +0000 Subject: fix oversites in libbsp/unix/posix --- c/src/lib/libbsp/unix/posix/timer/timer.c | 71 +++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 c/src/lib/libbsp/unix/posix/timer/timer.c diff --git a/c/src/lib/libbsp/unix/posix/timer/timer.c b/c/src/lib/libbsp/unix/posix/timer/timer.c new file mode 100644 index 0000000000..baef9295e5 --- /dev/null +++ b/c/src/lib/libbsp/unix/posix/timer/timer.c @@ -0,0 +1,71 @@ +/* timer.c + * + * This file manages the interval timer on the PA-RISC. + * + * NOTE: It is important that the timer start/stop overhead be + * determined when porting or modifying this code. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#include + +#include + +struct timeval Timer_start; +struct timeval Timer_stop; +struct timezone Time_zone; + +rtems_boolean Timer_driver_Find_average_overhead; + +void Timer_initialize() +{ + gettimeofday( &Timer_start, &Time_zone ); +} + +#define AVG_OVERHEAD 0 /* It typically takes xxx microseconds */ + /* (XX countdowns) to start/stop the timer. */ +#define LEAST_VALID 10 /* Don't trust a value lower than this */ + +int Read_timer() +{ + int total; + + gettimeofday( &Timer_stop, &Time_zone ); + + if ( Timer_stop.tv_sec == Timer_start.tv_sec ) + total = Timer_stop.tv_usec - Timer_start.tv_usec; + else { + total = 1000000 - Timer_start.tv_usec; + total += (Timer_stop.tv_sec - Timer_start.tv_sec - 1) * 1000000; + total += Timer_stop.tv_usec; + } + + if ( Timer_driver_Find_average_overhead == 1 ) + return total; /* in countdown units */ + else { + if ( total < LEAST_VALID ) + return 0; /* below timer resolution */ + return total - AVG_OVERHEAD; + } +} + +rtems_status_code Empty_function( void ) +{ + return RTEMS_SUCCESSFUL; +} + +void Set_find_average_overhead( + rtems_boolean find_flag +) +{ + Timer_driver_Find_average_overhead = find_flag; +} -- cgit v1.2.3