diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-02 21:05:17 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-11-02 21:05:17 +0000 |
commit | 93b4e6ef7ea97190a1d542191e78e287a3b540f4 (patch) | |
tree | 62e143be5198b521924f153bbbcadeb7134118cc /cpukit/score/src/coretodset.c | |
parent | Split threadq.c into multiple files. (diff) | |
download | rtems-93b4e6ef7ea97190a1d542191e78e287a3b540f4.tar.bz2 |
Split Heap and Time of Day Handlers.
Diffstat (limited to 'cpukit/score/src/coretodset.c')
-rw-r--r-- | cpukit/score/src/coretodset.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/cpukit/score/src/coretodset.c b/cpukit/score/src/coretodset.c new file mode 100644 index 0000000000..5b7358f734 --- /dev/null +++ b/cpukit/score/src/coretodset.c @@ -0,0 +1,64 @@ +/* + * Time of Day (TOD) Handler + * + * + * COPYRIGHT (c) 1989-1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <rtems/system.h> +#include <rtems/score/object.h> +#include <rtems/score/thread.h> +#include <rtems/score/tod.h> +#include <rtems/score/watchdog.h> + +/*PAGE + * + * _TOD_Set + * + * This rountine sets the current date and time with the specified + * new date and time structure. + * + * Input parameters: + * the_tod - pointer to the time and date structure + * seconds_since_epoch - seconds since system epoch + * + * Output parameters: NONE + */ + +void _TOD_Set( + TOD_Control *the_tod, + Watchdog_Interval seconds_since_epoch +) +{ + Watchdog_Interval ticks_until_next_second; + + _Thread_Disable_dispatch(); + _TOD_Deactivate(); + + if ( seconds_since_epoch < _TOD_Seconds_since_epoch ) + _Watchdog_Adjust_seconds( WATCHDOG_BACKWARD, + _TOD_Seconds_since_epoch - seconds_since_epoch ); + else + _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, + seconds_since_epoch - _TOD_Seconds_since_epoch ); + + ticks_until_next_second = _TOD_Ticks_per_second; + if ( ticks_until_next_second > _TOD_Current.ticks ) + ticks_until_next_second -= _TOD_Current.ticks; + + _TOD_Current = *the_tod; + _TOD_Seconds_since_epoch = seconds_since_epoch; + _TOD_Is_set = TRUE; + _TOD_Activate( ticks_until_next_second ); + + _Thread_Enable_dispatch(); +} + |