score: New structure TOD_Control

Group the global TOD variables (_TOD_Now, _TOD_Uptime, and _TOD_Is_set)
in a structure to reduce address loads in _TOD_Tickle_ticks().
This commit is contained in:
Sebastian Huber
2012-06-13 11:29:53 +02:00
parent 50fc8f65a6
commit 3246b0f8fc
13 changed files with 40 additions and 37 deletions

View File

@@ -28,7 +28,7 @@ rtems_status_code rtems_clock_get_seconds_since_epoch(
if ( !the_interval ) if ( !the_interval )
return RTEMS_INVALID_ADDRESS; return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set ) if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED; return RTEMS_NOT_DEFINED;
*the_interval = _TOD_Seconds_since_epoch(); *the_interval = _TOD_Seconds_since_epoch();

View File

@@ -33,7 +33,7 @@ rtems_status_code rtems_clock_get_tod(
if ( !time_buffer ) if ( !time_buffer )
return RTEMS_INVALID_ADDRESS; return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set ) if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED; return RTEMS_NOT_DEFINED;
/* Obtain the current time */ /* Obtain the current time */

View File

@@ -28,7 +28,7 @@ rtems_status_code rtems_clock_get_tod_timeval(
if ( !time ) if ( !time )
return RTEMS_INVALID_ADDRESS; return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set ) if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED; return RTEMS_NOT_DEFINED;
_TOD_Get_timeval( time ); _TOD_Get_timeval( time );

View File

@@ -51,7 +51,7 @@ rtems_status_code rtems_task_wake_when(
{ {
Watchdog_Interval seconds; Watchdog_Interval seconds;
if ( !_TOD_Is_set ) if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED; return RTEMS_NOT_DEFINED;
if ( !time_buffer ) if ( !time_buffer )

View File

@@ -50,7 +50,7 @@ rtems_status_code rtems_timer_fire_when(
Objects_Locations location; Objects_Locations location;
rtems_interval seconds; rtems_interval seconds;
if ( !_TOD_Is_set ) if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED; return RTEMS_NOT_DEFINED;
if ( !_TOD_Validate( wall_time ) ) if ( !_TOD_Validate( wall_time ) )

View File

@@ -55,7 +55,7 @@ rtems_status_code rtems_timer_server_fire_when(
if ( !timer_server ) if ( !timer_server )
return RTEMS_INCORRECT_STATE; return RTEMS_INCORRECT_STATE;
if ( !_TOD_Is_set ) if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED; return RTEMS_NOT_DEFINED;
if ( !routine ) if ( !routine )

View File

@@ -123,26 +123,29 @@ extern "C" {
/**@{*/ /**@{*/
/** /**
* @brief Is the Time Of Day Set * @brief TOD control.
*
* This is true if the application has set the current
* time of day, and false otherwise.
*/ */
SCORE_EXTERN bool _TOD_Is_set; typedef struct {
/**
* @brief Current time of day value.
*/
Timestamp_Control now;
/** /**
* @brief Current Time of Day (Timespec) * @brief System uptime.
* */
* The following contains the current time of day. Timestamp_Control uptime;
*/
SCORE_EXTERN Timestamp_Control _TOD_Now;
/** /**
* @brief Current Time of Day (Timespec) * @brief Indicates if the time of day is set.
* *
* The following contains the running uptime. * This is true if the application has set the current
*/ * time of day, and false otherwise.
SCORE_EXTERN Timestamp_Control _TOD_Uptime; */
bool is_set;
} TOD_Control;
SCORE_EXTERN TOD_Control _TOD;
/** /**
* @brief Seconds Since RTEMS Epoch * @brief Seconds Since RTEMS Epoch
@@ -151,7 +154,7 @@ SCORE_EXTERN Timestamp_Control _TOD_Uptime;
* January 1, TOD_BASE_YEAR until the current time of day. * January 1, TOD_BASE_YEAR until the current time of day.
*/ */
#define _TOD_Seconds_since_epoch() \ #define _TOD_Seconds_since_epoch() \
_Timestamp_Get_seconds(&_TOD_Now) _Timestamp_Get_seconds(&_TOD.now)
/** /**
* @brief _TOD_Handler_initialization * @brief _TOD_Handler_initialization

View File

@@ -33,12 +33,12 @@
void _TOD_Handler_initialization(void) void _TOD_Handler_initialization(void)
{ {
/* POSIX format TOD (timespec) */ /* POSIX format TOD (timespec) */
_Timestamp_Set( &_TOD_Now, TOD_SECONDS_1970_THROUGH_1988, 0 ); _Timestamp_Set( &_TOD.now, TOD_SECONDS_1970_THROUGH_1988, 0 );
/* Uptime (timespec) */ /* Uptime (timespec) */
_Timestamp_Set_to_zero( &_TOD_Uptime ); _Timestamp_Set_to_zero( &_TOD.uptime );
/* TOD has not been set */ /* TOD has not been set */
_TOD_Is_set = false; _TOD.is_set = false;
_TOD_Activate(); _TOD_Activate();
} }

View File

@@ -31,9 +31,9 @@ void _TOD_Get_as_timestamp(
/* assume time checked for NULL by caller */ /* assume time checked for NULL by caller */
/* _TOD_Now is the native current time */ /* _TOD.now is the native current time */
_ISR_Disable( level ); _ISR_Disable( level );
now = _TOD_Now; now = _TOD.now;
nanoseconds = (*_Watchdog_Nanoseconds_since_tick_handler)(); nanoseconds = (*_Watchdog_Nanoseconds_since_tick_handler)();
_ISR_Enable( level ); _ISR_Enable( level );

View File

@@ -42,9 +42,9 @@ void _TOD_Get_uptime(
/* assume time checked for NULL by caller */ /* assume time checked for NULL by caller */
/* _TOD_Uptime is in native timestamp format */ /* _TOD.uptime is in native timestamp format */
_ISR_Disable( level ); _ISR_Disable( level );
up = _TOD_Uptime; up = _TOD.uptime;
nanoseconds = (*_Watchdog_Nanoseconds_since_tick_handler)(); nanoseconds = (*_Watchdog_Nanoseconds_since_tick_handler)();
_ISR_Enable( level ); _ISR_Enable( level );

View File

@@ -38,8 +38,8 @@ void _TOD_Set_with_timestamp(
else else
_Watchdog_Adjust_seconds( WATCHDOG_FORWARD, seconds_next - seconds_now ); _Watchdog_Adjust_seconds( WATCHDOG_FORWARD, seconds_next - seconds_now );
_TOD_Now = *tod; _TOD.now = *tod;
_TOD_Is_set = true; _TOD.is_set = true;
_TOD_Activate(); _TOD_Activate();
_Thread_Enable_dispatch(); _Thread_Enable_dispatch();

View File

@@ -44,11 +44,11 @@ void _TOD_Tickle_ticks( void )
_Watchdog_Ticks_since_boot += 1; _Watchdog_Ticks_since_boot += 1;
/* Update the timespec format uptime */ /* Update the timespec format uptime */
_Timestamp_Add_to( &_TOD_Uptime, &tick ); _Timestamp_Add_to( &_TOD.uptime, &tick );
/* we do not care how much the uptime changed */ /* we do not care how much the uptime changed */
/* Update the timespec format TOD */ /* Update the timespec format TOD */
seconds = _Timestamp_Add_to_at_tick( &_TOD_Now, &tick ); seconds = _Timestamp_Add_to_at_tick( &_TOD.now, &tick );
while ( seconds ) { while ( seconds ) {
_Watchdog_Tickle_seconds(); _Watchdog_Tickle_seconds();
seconds--; seconds--;

View File

@@ -406,8 +406,8 @@ uninitialized =
/*timer.h*/ (sizeof _Timer_Information) + /*timer.h*/ (sizeof _Timer_Information) +
/*tod.h*/ (sizeof _TOD_Now) + /*tod.h*/ (sizeof _TOD.now) +
(sizeof _TOD_Uptime) + (sizeof _TOD.uptime) +
/*tqdata.h*/ 0 + /*tqdata.h*/ 0 +