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 )
return RTEMS_INVALID_ADDRESS;
if ( !_TOD_Is_set )
if ( !_TOD.is_set )
return RTEMS_NOT_DEFINED;
*the_interval = _TOD_Seconds_since_epoch();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -33,12 +33,12 @@
void _TOD_Handler_initialization(void)
{
/* 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) */
_Timestamp_Set_to_zero( &_TOD_Uptime );
_Timestamp_Set_to_zero( &_TOD.uptime );
/* TOD has not been set */
_TOD_Is_set = false;
_TOD.is_set = false;
_TOD_Activate();
}

View File

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

View File

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

View File

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

View File

@@ -44,11 +44,11 @@ void _TOD_Tickle_ticks( void )
_Watchdog_Ticks_since_boot += 1;
/* 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 */
/* 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 ) {
_Watchdog_Tickle_seconds();
seconds--;

View File

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