[PATCH 04/16] score: Add _Watchdog_Ticks_per_second

Joel Sherrill joel at rtems.org
Mon Oct 23 14:49:39 UTC 2017


On Mon, Oct 23, 2017 at 8:53 AM, Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> This value is frequently used.  Avoid the function call overhead and the
> integer division at run-time.
>
> Update #3117.
> Update #3182.
> ---
>  cpukit/rtems/Makefile.am                    |  1 -
>  cpukit/rtems/include/rtems/rtems/clock.h    |  5 ++++-
>  cpukit/rtems/src/clockgettickspersecond.c   | 29
> -----------------------------
>  cpukit/sapi/include/confdefs.h              |  4 ++++
>  cpukit/score/include/rtems/score/watchdog.h |  8 ++++++++
>  testsuites/sptests/spwatchdog/init.c        |  6 ++++++
>  6 files changed, 22 insertions(+), 31 deletions(-)
>  delete mode 100644 cpukit/rtems/src/clockgettickspersecond.c
>
> diff --git a/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am
> index da6e302e2e..c8ff4f4aa5 100644
> --- a/cpukit/rtems/Makefile.am
> +++ b/cpukit/rtems/Makefile.am
> @@ -140,7 +140,6 @@ librtems_a_SOURCES += src/barrierwait.c
>
>  ## CLOCK_C_FILES
>  librtems_a_SOURCES += src/clockgetsecondssinceepoch.c
> -librtems_a_SOURCES += src/clockgettickspersecond.c
>  librtems_a_SOURCES += src/clockgettod.c
>  librtems_a_SOURCES += src/clockgettodtimeval.c
>  librtems_a_SOURCES += src/clockgetuptime.c
> diff --git a/cpukit/rtems/include/rtems/rtems/clock.h
> b/cpukit/rtems/include/rtems/rtems/clock.h
> index b1ae8845a6..542785d50b 100644
> --- a/cpukit/rtems/include/rtems/rtems/clock.h
> +++ b/cpukit/rtems/include/rtems/rtems/clock.h
> @@ -196,7 +196,10 @@ RTEMS_INLINE_ROUTINE bool rtems_clock_tick_before(
>   *         fail since RTEMS is always configured to know the number of
>   *         ticks per second.
>   */
> -rtems_interval rtems_clock_get_ticks_per_second(void);
> +RTEMS_INLINE_ROUTINE rtems_interval rtems_clock_get_ticks_per_second(
> void )
> +{
> +  return _Watchdog_Ticks_per_second;
> +}
>
>
This is a public API method and cannot be inlined. Otherwise, it can't be
accessed
from languages like assembly or Ada.

All public API methods need to have real bodies.


>  /**
>   * @brief Set the Current TOD
> diff --git a/cpukit/rtems/src/clockgettickspersecond.c b/cpukit/rtems/src/
> clockgettickspersecond.c
> deleted file mode 100644
> index f49c91cbd3..0000000000
> --- a/cpukit/rtems/src/clockgettickspersecond.c
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -/**
> - *  @file
> - *
> - *  @brief Obtain Ticks Per Seconds
> - *  @ingroup ClassicClock
> - */
> -
> -/*
> - *  COPYRIGHT (c) 1989-2008.
> - *  On-Line Applications Research Corporation (OAR).
> - *
> - *  The license and distribution terms for this file may be
> - *  found in the file LICENSE in this distribution or at
> - *  http://www.rtems.org/license/LICENSE.
> - */
> -
> -#if HAVE_CONFIG_H
> -#include "config.h"
> -#endif
> -
> -#include <rtems/rtems/clock.h>
> -#include <rtems/score/todimpl.h>
> -#include <rtems/config.h>
> -
> -rtems_interval rtems_clock_get_ticks_per_second(void)
> -{
> -  return TOD_MICROSECONDS_PER_SECOND /
> -    rtems_configuration_get_microseconds_per_tick();
> -}
> diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/
> confdefs.h
> index a64170bdff..3dfcf9b2d5 100755
> --- a/cpukit/sapi/include/confdefs.h
> +++ b/cpukit/sapi/include/confdefs.h
> @@ -2287,6 +2287,8 @@ extern rtems_initialization_tasks_table
> Initialization_tasks[];
>              RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
>    #endif
>
> +  #define _CONFIGURE_TICKS_PER_SECOND (1000000 /
> CONFIGURE_MICROSECONDS_PER_TICK)
> +
>    /** The configures the number of clock ticks per timeslice. */
>    #ifndef CONFIGURE_TICKS_PER_TIMESLICE
>      #define CONFIGURE_TICKS_PER_TIMESLICE        50
> @@ -3102,6 +3104,8 @@ extern rtems_initialization_tasks_table
> Initialization_tasks[];
>    const size_t _Thread_Control_add_on_count =
>      RTEMS_ARRAY_SIZE( _Thread_Control_add_ons );
>
> +  const uint32_t _Watchdog_Ticks_per_second = _CONFIGURE_TICKS_PER_SECOND;
> +
>    /**
>     * This is the Classic API Configuration Table.
>     */
> diff --git a/cpukit/score/include/rtems/score/watchdog.h
> b/cpukit/score/include/rtems/score/watchdog.h
> index 11a5974c26..bbe2a93b26 100644
> --- a/cpukit/score/include/rtems/score/watchdog.h
> +++ b/cpukit/score/include/rtems/score/watchdog.h
> @@ -158,6 +158,14 @@ struct Watchdog_Control {
>   */
>  extern volatile Watchdog_Interval _Watchdog_Ticks_since_boot;
>
> +/**
> + * @brief The watchdog ticks per second.
> + *
> + * This constant is defined by the application configuration via
> + * <rtems/confdefs.h>.
> + */
> +extern const uint32_t _Watchdog_Ticks_per_second;
> +
>  /**@}*/
>
>  #ifdef __cplusplus
> diff --git a/testsuites/sptests/spwatchdog/init.c b/testsuites/sptests/
> spwatchdog/init.c
> index 3b08fb57e5..3ce7917166 100644
> --- a/testsuites/sptests/spwatchdog/init.c
> +++ b/testsuites/sptests/spwatchdog/init.c
> @@ -55,6 +55,11 @@ static void test_watchdog_static_init( void )
>    rtems_test_assert( memcmp( &a, &b, sizeof( a ) ) == 0 );
>  }
>
> +static void test_watchdog_config( void )
> +{
> +  rtems_test_assert( _Watchdog_Ticks_per_second == 100 );
> +}
> +
>  static bool test_watchdog_is_inactive( test_watchdog *watchdog )
>  {
>    return _Watchdog_Get_state( &watchdog->Base ) == WATCHDOG_INACTIVE;
> @@ -225,6 +230,7 @@ rtems_task Init(
>
>    test_watchdog_operations();
>    test_watchdog_static_init();
> +  test_watchdog_config();
>
>    build_time( &time, 12, 31, 1988, 9, 0, 0, 0 );
>
> --
> 2.12.3
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20171023/26cf2def/attachment-0002.html>


More information about the devel mailing list