forked from Imagelibrary/rtems
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:
@@ -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();
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
@@ -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 ) )
|
||||||
|
|||||||
@@ -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 )
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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--;
|
||||||
|
|||||||
@@ -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 +
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user