forked from Imagelibrary/rtems
fix oversites in libbsp/unix/posix
This commit is contained in:
71
c/src/lib/libbsp/unix/posix/timer/timer.c
Normal file
71
c/src/lib/libbsp/unix/posix/timer/timer.c
Normal file
@@ -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 <rtems.h>
|
||||
|
||||
#include <time.h>
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user