[PATCH 2/3] score: New structure TOD_Control

sebastian.huber at embedded-brains.de sebastian.huber at embedded-brains.de
Wed Jun 13 09:59:00 UTC 2012


From: Sebastian Huber <sebastian.huber at embedded-brains.de>

Group the global TOD variables (_TOD_Now, _TOD_Uptime, and _TOD_Is_set)
in a structure to reduce address loads in _TOD_Tickle_ticks().
---
 cpukit/rtems/src/clockgetsecondssinceepoch.c |    2 +-
 cpukit/rtems/src/clockgettod.c               |    2 +-
 cpukit/rtems/src/clockgettodtimeval.c        |    2 +-
 cpukit/rtems/src/taskwakewhen.c              |    2 +-
 cpukit/rtems/src/timerfirewhen.c             |    2 +-
 cpukit/rtems/src/timerserverfirewhen.c       |    2 +-
 cpukit/score/include/rtems/score/tod.h       |   39 ++++++++++++++------------
 cpukit/score/src/coretod.c                   |    6 ++--
 cpukit/score/src/coretodget.c                |    4 +-
 cpukit/score/src/coretodgetuptime.c          |    4 +-
 cpukit/score/src/coretodset.c                |    4 +-
 cpukit/score/src/coretodtickle.c             |    4 +-
 testsuites/sptests/spsize/size.c             |    4 +-
 13 files changed, 40 insertions(+), 37 deletions(-)

diff --git a/cpukit/rtems/src/clockgetsecondssinceepoch.c b/cpukit/rtems/src/clockgetsecondssinceepoch.c
index 040a407..91ca553 100644
--- a/cpukit/rtems/src/clockgetsecondssinceepoch.c
+++ b/cpukit/rtems/src/clockgetsecondssinceepoch.c
@@ -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();
diff --git a/cpukit/rtems/src/clockgettod.c b/cpukit/rtems/src/clockgettod.c
index b94d0dc..dd68ec5 100644
--- a/cpukit/rtems/src/clockgettod.c
+++ b/cpukit/rtems/src/clockgettod.c
@@ -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 */
diff --git a/cpukit/rtems/src/clockgettodtimeval.c b/cpukit/rtems/src/clockgettodtimeval.c
index 66eab0b..a3fb49d 100644
--- a/cpukit/rtems/src/clockgettodtimeval.c
+++ b/cpukit/rtems/src/clockgettodtimeval.c
@@ -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 );
diff --git a/cpukit/rtems/src/taskwakewhen.c b/cpukit/rtems/src/taskwakewhen.c
index 8043db5..d181848 100644
--- a/cpukit/rtems/src/taskwakewhen.c
+++ b/cpukit/rtems/src/taskwakewhen.c
@@ -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 )
diff --git a/cpukit/rtems/src/timerfirewhen.c b/cpukit/rtems/src/timerfirewhen.c
index b3e1231..df24e2a 100644
--- a/cpukit/rtems/src/timerfirewhen.c
+++ b/cpukit/rtems/src/timerfirewhen.c
@@ -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 ) )
diff --git a/cpukit/rtems/src/timerserverfirewhen.c b/cpukit/rtems/src/timerserverfirewhen.c
index 2a1172d..5f029a0 100644
--- a/cpukit/rtems/src/timerserverfirewhen.c
+++ b/cpukit/rtems/src/timerserverfirewhen.c
@@ -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 )
diff --git a/cpukit/score/include/rtems/score/tod.h b/cpukit/score/include/rtems/score/tod.h
index e9a2e84..06cc900 100644
--- a/cpukit/score/include/rtems/score/tod.h
+++ b/cpukit/score/include/rtems/score/tod.h
@@ -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.
- */
-SCORE_EXTERN bool _TOD_Is_set;
-
-/**
- *  @brief Current Time of Day (Timespec)
- *
- *  The following contains the current time of day.
- */
-SCORE_EXTERN Timestamp_Control _TOD_Now;
-
-/**
- *  @brief Current Time of Day (Timespec)
- *
- *  The following contains the running uptime.
- */
-SCORE_EXTERN Timestamp_Control _TOD_Uptime;
+ *  @brief TOD control.
+ */
+typedef struct {
+  /**
+   *  @brief Current time of day value.
+   */
+  Timestamp_Control now;
+
+  /**
+   *  @brief System uptime.
+   */
+  Timestamp_Control 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
diff --git a/cpukit/score/src/coretod.c b/cpukit/score/src/coretod.c
index 30efa76..1784a89 100644
--- a/cpukit/score/src/coretod.c
+++ b/cpukit/score/src/coretod.c
@@ -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();
 }
diff --git a/cpukit/score/src/coretodget.c b/cpukit/score/src/coretodget.c
index 3e73a8d..94517e5 100644
--- a/cpukit/score/src/coretodget.c
+++ b/cpukit/score/src/coretodget.c
@@ -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 );
 
diff --git a/cpukit/score/src/coretodgetuptime.c b/cpukit/score/src/coretodgetuptime.c
index 4542529..c3c05ae 100644
--- a/cpukit/score/src/coretodgetuptime.c
+++ b/cpukit/score/src/coretodgetuptime.c
@@ -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 );
 
diff --git a/cpukit/score/src/coretodset.c b/cpukit/score/src/coretodset.c
index e1b86a3..9708ef9 100644
--- a/cpukit/score/src/coretodset.c
+++ b/cpukit/score/src/coretodset.c
@@ -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();
diff --git a/cpukit/score/src/coretodtickle.c b/cpukit/score/src/coretodtickle.c
index 25ab6f3..fbf67fd 100644
--- a/cpukit/score/src/coretodtickle.c
+++ b/cpukit/score/src/coretodtickle.c
@@ -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--;
diff --git a/testsuites/sptests/spsize/size.c b/testsuites/sptests/spsize/size.c
index cc37288..529cdd3 100644
--- a/testsuites/sptests/spsize/size.c
+++ b/testsuites/sptests/spsize/size.c
@@ -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                                         +
 
-- 
1.6.4.2




More information about the devel mailing list