diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-12-08 19:41:31 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-12-08 19:41:31 +0000 |
commit | c16bcc009b3bec9f653cefbe5247ef9d74352833 (patch) | |
tree | bbe12a1ed854be9a8ab090f774b0fc096bb76cc9 /cpukit/score/src/coretodset.c | |
parent | 2008-12-08 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-c16bcc009b3bec9f653cefbe5247ef9d74352833.tar.bz2 |
2008-12-08 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/src/__times.c, libmisc/cpuuse/cpuusagereport.c,
libmisc/cpuuse/cpuusagereset.c, posix/src/clockgettime.c,
posix/src/pthread.c, posix/src/timersettime.c,
rtems/include/rtems/rtems/ratemon.h,
rtems/src/clockgetsecondssinceepoch.c, rtems/src/clockgetuptime.c,
rtems/src/ratemongetstatus.c, rtems/src/ratemonperiod.c,
rtems/src/ratemonreportstatistics.c, rtems/src/taskwakewhen.c,
rtems/src/timerfirewhen.c, rtems/src/timerserver.c,
rtems/src/timerserverfirewhen.c, score/Makefile.am,
score/preinstall.am, score/include/rtems/score/thread.h,
score/include/rtems/score/tod.h, score/src/coretod.c,
score/src/coretodget.c, score/src/coretodgetuptime.c,
score/src/coretodset.c, score/src/coretodtickle.c,
score/src/threaddispatch.c, score/src/threadinitialize.c: Add
SuperCore handler Timestamp to provide an opaque class for the
representation and manipulation of uptime, time of day, and the
difference between two timestamps. By using SuperCore Timestamp, it
is clear which methods and APIs really have to be struct timespec and
which can be in an optimized native format.
* score/include/rtems/score/timestamp.h,
score/src/coretodgetuptimetimespec.c: New files.
Diffstat (limited to 'cpukit/score/src/coretodset.c')
-rw-r--r-- | cpukit/score/src/coretodset.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/cpukit/score/src/coretodset.c b/cpukit/score/src/coretodset.c index c34f571e30..fea26dd190 100644 --- a/cpukit/score/src/coretodset.c +++ b/cpukit/score/src/coretodset.c @@ -19,6 +19,7 @@ #include <rtems/system.h> #include <rtems/score/object.h> #include <rtems/score/thread.h> +#include <rtems/score/timestamp.h> #include <rtems/score/tod.h> #include <rtems/score/watchdog.h> @@ -39,19 +40,21 @@ void _TOD_Set( const struct timespec *time ) { + long seconds; + _Thread_Disable_dispatch(); _TOD_Deactivate(); - if ( time->tv_sec < _TOD_Seconds_since_epoch ) - _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, - _TOD_Seconds_since_epoch - time->tv_sec ); + seconds = _TOD_Seconds_since_epoch(); + + if ( time->tv_sec < seconds ) + _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, seconds - time->tv_sec ); else - _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, - time->tv_sec - _TOD_Seconds_since_epoch ); + _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, time->tv_sec - seconds ); /* POSIX format TOD (timespec) */ - _TOD_Now = *time; - _TOD_Is_set = TRUE; + _Timestamp_Set( &_TOD_Now, time->tv_sec, time->tv_nsec ); + _TOD_Is_set = TRUE; _TOD_Activate(); |