summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c-user/clock/directives.rst874
-rw-r--r--c-user/clock/introduction.rst84
-rw-r--r--c-user/glossary.rst53
3 files changed, 613 insertions, 398 deletions
diff --git a/c-user/clock/directives.rst b/c-user/clock/directives.rst
index 06fe38b..a13b5ef 100644
--- a/c-user/clock/directives.rst
+++ b/c-user/clock/directives.rst
@@ -1,549 +1,659 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2014, 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+.. This file is part of the RTEMS quality process and was automatically
+.. generated. If you find something that needs to be fixed or
+.. worded better please post a report or patch to an RTEMS mailing list
+.. or raise a bug report:
+..
+.. https://www.rtems.org/bugs.html
+..
+.. For information on updating and regenerating please refer to the How-To
+.. section in the Software Requirements Engineering chapter of the
+.. RTEMS Software Engineering manual. The manual is provided as a part of
+.. a release. For development sources please refer to the online
+.. documentation at:
+..
+.. https://docs.rtems.org
+
+.. _ClockManagerDirectives:
+
Directives
==========
-This section details the clock manager's directives. A subsection is dedicated
-to each of this manager's directives and describes the calling sequence,
-related constants, usage, and status codes.
+This section details the directives of the Clock Manager. A subsection is
+dedicated to each of this manager's directives and lists the calling sequence,
+parameters, description, return values, and notes of the directive.
+
+.. Generated from spec:/rtems/clock/if/set
.. raw:: latex
- \clearpage
+ \clearpage
-.. index:: set the time of day
-.. index:: rtems_clock_set
+.. index:: rtems_clock_set()
-.. _rtems_clock_set:
+.. _InterfaceRtemsClockSet:
-CLOCK_SET - Set date and time
------------------------------
+rtems_clock_set()
+-----------------
-CALLING SEQUENCE:
- .. code-block:: c
+Sets the :term:`CLOCK_REALTIME` to the time of day.
- rtems_status_code rtems_clock_set(
- rtems_time_of_day *time_buffer
- );
+.. rubric:: CALLING SEQUENCE:
-DIRECTIVE STATUS CODES:
- .. list-table::
- :class: rtems-table
+.. code-block:: c
- * - ``RTEMS_SUCCESSFUL``
- - date and time set successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``time_buffer`` is NULL
- * - ``RTEMS_INVALID_CLOCK``
- - invalid time of day
+ rtems_status_code rtems_clock_set( const rtems_time_of_day *time_of_day );
-DESCRIPTION:
- This directive sets the system date and time. The date, time, and ticks in
- the time_buffer structure are all range-checked, and an error is returned
- if any one is out of its valid range.
+.. rubric:: PARAMETERS:
-NOTES:
- Years before 1988 are invalid.
+``time_of_day``
+ This parameter is the time of day to set the clock.
- The system date and time are based on the configured tick rate (number of
- microseconds in a tick).
+.. rubric:: RETURN VALUES:
- Setting the time forward may cause a higher priority task, blocked waiting
- on a specific time, to be made ready. In this case, the calling task will
- be preempted after the next clock tick.
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
- Re-initializing RTEMS causes the system date and time to be reset to an
- uninitialized state. Another call to ``rtems_clock_set`` is required to
- re-initialize the system date and time to application specific
- specifications.
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``time_of_day`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
-.. raw:: latex
+:c:macro:`RTEMS_INVALID_CLOCK`
+ The time of day specified by ``time_of_day`` was invalid.
- \clearpage
+.. rubric:: NOTES:
-.. index:: obtain the time of day
-.. index:: rtems_clock_get_tod
+The date, time, and ticks specified by ``time_of_day`` are all range-checked,
+and an error is returned if any one is out of its valid range.
-.. _rtems_clock_get_tod:
+RTEMS can represent time points of this clock in nanoseconds ranging from
+1988-01-01T00:00:00.000000000Z to 2514-05-31T01:53:03.999999999Z. The future
+uptime of the system shall be in this range, otherwise the system behaviour is
+undefined.
-CLOCK_GET_TOD - Get date and time in TOD format
------------------------------------------------
+The specified time is based on the configured :term:`clock tick` rate, see the
+:ref:`CONFIGURE_MICROSECONDS_PER_TICK` application configuration option.
-CALLING SEQUENCE:
- .. code-block:: c
+Setting the time forward will fire all :term:`CLOCK_REALTIME` timers which are
+scheduled at a time point before or at the time set by the directive. This may
+unblock tasks, which may preempt the calling task. User-provided timer routines
+will execute in the context of the caller.
- rtems_status_code rtems_clock_get_tod(
- rtems_time_of_day *time_buffer
- );
+It is allowed to call this directive from within interrupt context, however,
+this is not recommended since an arbitrary number of timers may fire.
-DIRECTIVE STATUS CODES:
- .. list-table::
- :class: rtems-table
+The directive shall be called at least once to enable the service of
+:term:`CLOCK_REALTIME` related directives. If the clock is not set at least
+once, they may return an error status.
- * - ``RTEMS_SUCCESSFUL``
- - current time obtained successfully
- * - ``RTEMS_NOT_DEFINED``
- - system date and time is not set
- * - ``RTEMS_INVALID_ADDRESS``
- - ``time_buffer`` is NULL
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- This directive obtains the system date and time. If the date and time has
- not been set with a previous call to ``rtems_clock_set``, then the
- ``RTEMS_NOT_DEFINED`` status code is returned.
+The following constraints apply to this directive:
-NOTES:
- This directive is callable from an ISR.
+* The directive may be called from within any runtime context.
- This directive will not cause the running task to be preempted.
- Re-initializing RTEMS causes the system date and time to be reset to an
- uninitialized state. Another call to ``rtems_clock_set`` is required to
- re-initialize the system date and time to application specific
- specifications.
+* The directive may change the priority of another task which may preempt the
+ calling task.
+
+* The directive may unblock another task which may preempt the calling task.
+
+.. Generated from spec:/rtems/clock/if/get-tod
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_tod()
+
+.. _InterfaceRtemsClockGetTod:
+
+rtems_clock_get_tod()
+---------------------
+
+Gets the time of day associated with the current :term:`CLOCK_REALTIME`.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_clock_get_tod( rtems_time_of_day *time_of_day );
+
+.. rubric:: PARAMETERS:
+
+``time_of_day``
+ This parameter is the pointer to a RTEMS time of day variable. When the
+ directive call is successful, the time of day associated with the
+ :term:`CLOCK_REALTIME` at some point during the directive call will be
+ stored in this variable.
+
+.. rubric:: RETURN VALUES:
-.. index:: obtain the time of day
-.. index:: rtems_clock_get_tod_timeval
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
-.. _rtems_clock_get_tod_timeval:
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``time_of_day`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
-CLOCK_GET_TOD_TIMEVAL - Get date and time in timeval format
------------------------------------------------------------
+:c:macro:`RTEMS_NOT_DEFINED`
+ The :term:`CLOCK_REALTIME` was not set. It can be set with
+ :ref:`InterfaceRtemsClockSet`.
-CALLING SEQUENCE:
- .. code-block:: c
+.. rubric:: CONSTRAINTS:
- rtems_status_code rtems_clock_get_tod_interval(
- struct timeval *time
- );
+The following constraints apply to this directive:
-DIRECTIVE STATUS CODES:
- .. list-table::
- :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - current time obtained successfully
- * - ``RTEMS_NOT_DEFINED``
- - system date and time is not set
- * - ``RTEMS_INVALID_ADDRESS``
- - ``time`` is NULL
+* The directive may be called from within any runtime context.
-DESCRIPTION:
- This directive obtains the system date and time in POSIX ``struct timeval``
- format. If the date and time has not been set with a previous call to
- ``rtems_clock_set``, then the ``RTEMS_NOT_DEFINED`` status code is
- returned.
+* The directive will not cause the calling task to be preempted.
-NOTES:
- This directive is callable from an ISR.
+* The directive requires a :term:`Clock Driver`.
- This directive will not cause the running task to be preempted.
- Re-initializing RTEMS causes the system date and time to be reset to an
- uninitialized state. Another call to ``rtems_clock_set`` is required to
- re-initialize the system date and time to application specific
- specifications.
+.. Generated from spec:/rtems/clock/if/get-tod-timeval
.. raw:: latex
- \clearpage
+ \clearpage
-.. index:: obtain seconds since epoch
-.. index:: rtems_clock_get_seconds_since_epoch
+.. index:: rtems_clock_get_tod_timeval()
-.. _rtems_clock_get_seconds_since_epoch:
+.. _InterfaceRtemsClockGetTodTimeval:
-CLOCK_GET_SECONDS_SINCE_EPOCH - Get seconds since epoch
--------------------------------------------------------
+rtems_clock_get_tod_timeval()
+-----------------------------
+
+Gets the seconds and microseconds elapsed since the :term:`Unix epoch` and the
+current :term:`CLOCK_REALTIME`.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_clock_get_tod_timeval( struct timeval *time_of_day );
+
+.. rubric:: PARAMETERS:
+
+``time_of_day``
+ This parameter is the pointer to a timeval structure variable. When the
+ directive call is successful, the seconds and microseconds elapsed since
+ the :term:`Unix epoch` and the :term:`CLOCK_REALTIME` at some point during
+ the directive call will be stored in this variable.
+
+.. rubric:: RETURN VALUES:
-CALLING SEQUENCE:
- .. code-block:: c
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
- rtems_status_code rtems_clock_get_seconds_since_epoch(
- rtems_interval *the_interval
- );
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``time_of_day`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
-DIRECTIVE STATUS CODES:
- .. list-table::
- :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - current time obtained successfully
- * - ``RTEMS_NOT_DEFINED``
- - system date and time is not set
- * - ``RTEMS_INVALID_ADDRESS``
- - ``the_interval`` is NULL
+:c:macro:`RTEMS_NOT_DEFINED`
+ The :term:`CLOCK_REALTIME` was not set. It can be set with
+ :ref:`InterfaceRtemsClockSet`.
-DESCRIPTION:
- This directive returns the number of seconds since the RTEMS epoch and the
- current system date and time. If the date and time has not been set with a
- previous call to ``rtems_clock_set``, then the ``RTEMS_NOT_DEFINED`` status
- code is returned.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This directive is callable from an ISR.
+The following constraints apply to this directive:
- This directive will not cause the running task to be preempted.
- Re-initializing RTEMS causes the system date and time to be reset to an
- uninitialized state. Another call to ``rtems_clock_set`` is required to
- re-initialize the system date and time to application specific
- specifications.
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-seconds-since-epoch
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_seconds_since_epoch()
+
+.. _InterfaceRtemsClockGetSecondsSinceEpoch:
+
+rtems_clock_get_seconds_since_epoch()
+-------------------------------------
+
+Gets the seconds elapsed since the :term:`RTEMS epoch` and the current
+:term:`CLOCK_REALTIME`.
-.. index:: obtain seconds since epoch
-.. index:: rtems_clock_get_ticks_per_second
+.. rubric:: CALLING SEQUENCE:
-.. _rtems_clock_get_ticks_per_second:
+.. code-block:: c
-CLOCK_GET_TICKS_PER_SECOND - Get ticks per second
--------------------------------------------------
+ rtems_status_code rtems_clock_get_seconds_since_epoch(
+ rtems_interval *seconds_since_rtems_epoch
+ );
-CALLING SEQUENCE:
- .. code-block:: c
+.. rubric:: PARAMETERS:
- rtems_interval rtems_clock_get_ticks_per_second(void);
+``seconds_since_rtems_epoch``
+ This parameter is the pointer to an interval variable. When the directive
+ call is successful, the seconds elapsed since the :term:`RTEMS epoch` and
+ the :term:`CLOCK_REALTIME` at some point during the directive call will be
+ stored in this variable.
-DIRECTIVE STATUS CODES:
- NONE
+.. rubric:: RETURN VALUES:
-DESCRIPTION:
- This directive returns the number of clock ticks per second. This is
- strictly based upon the microseconds per clock tick that the application
- has configured.
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
-NOTES:
- This directive is callable from an ISR.
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``seconds_since_rtems_epoch`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
- This directive will not cause the running task to be preempted.
+:c:macro:`RTEMS_NOT_DEFINED`
+ The :term:`CLOCK_REALTIME` was not set. It can be set with
+ :ref:`InterfaceRtemsClockSet`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-ticks-per-second
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_ticks_per_second()
+
+.. _InterfaceRtemsClockGetTicksPerSecond:
-.. index:: obtain ticks since boot
-.. index:: get current ticks counter value
-.. index:: rtems_clock_get_ticks_since_boot
+rtems_clock_get_ticks_per_second()
+----------------------------------
-.. _rtems_clock_get_ticks_since_boot:
+Gets the number of :term:`clock ticks <clock tick>` per second configured for
+the application.
-CLOCK_GET_TICKS_SINCE_BOOT - Get current ticks counter value
-------------------------------------------------------------
+.. rubric:: CALLING SEQUENCE:
-CALLING SEQUENCE:
- .. code-block:: c
+.. code-block:: c
- rtems_interval rtems_clock_get_ticks_since_boot(void);
+ rtems_interval rtems_clock_get_ticks_per_second( void );
-DIRECTIVE STATUS CODES:
- NONE
+.. rubric:: RETURN VALUES:
-DESCRIPTION:
+Returns the number of clock ticks per second configured for this application.
- This directive returns the current tick counter value. With a 1ms clock
- tick, this counter overflows after 50 days since boot. This is the
- historical measure of uptime in an RTEMS system. The newer service
- ``rtems_clock_get_uptime`` is another and potentially more accurate way of
- obtaining similar information.
+.. rubric:: NOTES:
-NOTES:
+The number of clock ticks per second is defined indirectly by the
+:ref:`CONFIGURE_MICROSECONDS_PER_TICK` configuration option.
- This directive is callable from an ISR.
+.. rubric:: CONSTRAINTS:
- This directive will not cause the running task to be preempted.
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/clock/if/get-ticks-since-boot
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_ticks_since_boot()
+
+.. _InterfaceRtemsClockGetTicksSinceBoot:
+
+rtems_clock_get_ticks_since_boot()
+----------------------------------
+
+Gets the number of :term:`clock ticks <clock tick>` since some time point
+during the system initialization or the last overflow of the clock tick
+counter.
-.. index:: rtems_clock_tick_later
+.. rubric:: CALLING SEQUENCE:
-.. _rtems_clock_tick_later:
+.. code-block:: c
-CLOCK_TICK_LATER - Get tick value in the future
------------------------------------------------
+ rtems_interval rtems_clock_get_ticks_since_boot( void );
-CALLING SEQUENCE:
- .. code-block:: c
+.. rubric:: RETURN VALUES:
- rtems_interval rtems_clock_tick_later(
- rtems_interval delta
- );
+Returns the number of :term:`clock ticks <clock tick>` since some time point
+during the system initialization or the last overflow of the clock tick
+counter.
-DESCRIPTION:
- Returns the ticks counter value delta ticks in the future.
+.. rubric:: NOTES:
-NOTES:
- This directive is callable from an ISR.
+With a 1ms clock tick, this counter overflows after 50 days since boot. This
+is the historical measure of uptime in an RTEMS system. The newer service
+:ref:`InterfaceRtemsClockGetUptime` is another and potentially more accurate
+way of obtaining similar information.
- This directive will not cause the running task to be preempted.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/clock/if/get-uptime
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_uptime()
+
+.. _InterfaceRtemsClockGetUptime:
+
+rtems_clock_get_uptime()
+------------------------
+
+Gets the seconds and nanoseconds elapsed since some time point during the
+system initialization using :term:`CLOCK_MONOTONIC`.
-.. index:: rtems_clock_tick_later_usec
+.. rubric:: CALLING SEQUENCE:
-.. _rtems_clock_tick_later_usec:
+.. code-block:: c
-CLOCK_TICK_LATER_USEC - Get tick value in the future in microseconds
---------------------------------------------------------------------
+ rtems_status_code rtems_clock_get_uptime( struct timespec *uptime );
-CALLING SEQUENCE:
- .. code-block:: c
+.. rubric:: PARAMETERS:
- rtems_interval rtems_clock_tick_later_usec(
- rtems_interval delta_in_usec
- );
+``uptime``
+ This parameter is the pointer to a timeval structure variable. When the
+ directive call is successful, the seconds and nanoseconds elapsed since
+ some time point during the system initialization and some point during the
+ directive call using :term:`CLOCK_MONOTONIC` will be stored in this
+ variable.
-DESCRIPTION:
- Returns the ticks counter value at least delta microseconds in the future.
+.. rubric:: RETURN VALUES:
-NOTES:
- This directive is callable from an ISR.
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
- This directive will not cause the running task to be preempted.
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``uptime`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-uptime-timeval
.. raw:: latex
- \clearpage
+ \clearpage
-.. index:: rtems_clock_tick_before
+.. index:: rtems_clock_get_uptime_timeval()
-.. _rtems_clock_tick_before:
+.. _InterfaceRtemsClockGetUptimeTimeval:
-CLOCK_TICK_BEFORE - Is tick value is before a point in time
------------------------------------------------------------
+rtems_clock_get_uptime_timeval()
+--------------------------------
-CALLING SEQUENCE:
- .. code-block:: c
+Gets the seconds and microseconds elapsed since some time point during the
+system initialization using :term:`CLOCK_MONOTONIC`.
- rtems_interval rtems_clock_tick_before(
- rtems_interval tick
- );
+.. rubric:: CALLING SEQUENCE:
-DESCRIPTION:
- Returns true if the current ticks counter value indicates a time before the
- time specified by the tick value and false otherwise.
+.. code-block:: c
-NOTES:
- This directive is callable from an ISR.
+ void rtems_clock_get_uptime_timeval( struct timeval *uptime );
- This directive will not cause the running task to be preempted.
+.. rubric:: PARAMETERS:
-EXAMPLE:
- .. code-block:: c
+``uptime``
+ This parameter is the pointer to a timeval structure variable. The seconds
+ and microseconds elapsed since some time point during the system
+ initialization and some point during the directive call using
+ :term:`CLOCK_MONOTONIC` will be stored in this variable. The pointer shall
+ be valid, otherwise the behaviour is undefined.
- status busy( void )
- {
- rtems_interval timeout = rtems_clock_tick_later_usec( 10000 );
- do {
- if ( ok() ) {
- return success;
- }
- } while ( rtems_clock_tick_before( timeout ) );
- return timeout;
- }
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-uptime-seconds
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_uptime_seconds()
+
+.. _InterfaceRtemsClockGetUptimeSeconds:
+
+rtems_clock_get_uptime_seconds()
+--------------------------------
-.. index:: clock get uptime
-.. index:: uptime
-.. index:: rtems_clock_get_uptime
+Gets the seconds elapsed since some time point during the system initialization
+using :term:`CLOCK_MONOTONIC`.
-.. _rtems_clock_get_uptime:
+.. rubric:: CALLING SEQUENCE:
-CLOCK_GET_UPTIME - Get the time since boot
-------------------------------------------
+.. code-block:: c
-CALLING SEQUENCE:
- .. code-block:: c
+ time_t rtems_clock_get_uptime_seconds( void );
- rtems_status_code rtems_clock_get_uptime(
- struct timespec *uptime
- );
+.. rubric:: RETURN VALUES:
-DIRECTIVE STATUS CODES:
- .. list-table::
- :class: rtems-table
- * - ``RTEMS_SUCCESSFUL``
- - clock tick processed successfully
- * - ``RTEMS_INVALID_ADDRESS``
- - ``time_buffer`` is ``NULL``
+Returns the seconds elapsed since some time point during the system
+initialization and some point during the directive call using
+:term:`CLOCK_MONOTONIC`.
-DESCRIPTION:
- This directive returns the seconds and nanoseconds since the system was
- booted. If the BSP supports nanosecond clock accuracy, the time reported
- will probably be different on every call.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This directive may be called from an ISR.
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-uptime-nanoseconds
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_get_uptime_nanoseconds()
+
+.. _InterfaceRtemsClockGetUptimeNanoseconds:
+
+rtems_clock_get_uptime_nanoseconds()
+------------------------------------
+
+Gets the nanoseconds elapsed since some time point during the system
+initialization using :term:`CLOCK_MONOTONIC`.
-.. index:: clock get uptime interval
-.. index:: uptime
-.. index:: rtems_clock_get_uptime_timeval
+.. rubric:: CALLING SEQUENCE:
-.. _rtems_clock_get_uptime_timeval:
+.. code-block:: c
-CLOCK_GET_UPTIME_TIMEVAL - Get the time since boot in timeval format
---------------------------------------------------------------------
+ uint64_t rtems_clock_get_uptime_nanoseconds( void );
-CALLING SEQUENCE:
- .. code-block:: c
+.. rubric:: RETURN VALUES:
- void rtems_clock_get_uptime_timeval(
- struct timeval *uptime
- );
+Returns the nanoseconds elapsed since some time point during the system
+initialization and some point during the directive call using
+:term:`CLOCK_MONOTONIC`.
-DIRECTIVE STATUS CODES:
- NONE
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- This directive returns the seconds and microseconds since the system was
- booted. If the BSP supports nanosecond clock accuracy, the time reported
- will probably be different on every call.
+The following constraints apply to this directive:
-NOTES:
- This directive may be called from an ISR.
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/tick-later
.. raw:: latex
- \clearpage
+ \clearpage
+
+.. index:: rtems_clock_tick_later()
+
+.. _InterfaceRtemsClockTickLater:
+
+rtems_clock_tick_later()
+------------------------
+
+Gets a :term:`clock tick` value which is at least delta clock ticks in the
+future.
+
+.. rubric:: CALLING SEQUENCE:
-.. index:: clock get uptime seconds
-.. index:: uptime
-.. index:: rtems_clock_get_uptime_seconds
+.. code-block:: c
-.. _rtems_clock_get_uptime_seconds:
+ rtems_interval rtems_clock_tick_later( rtems_interval delta );
-CLOCK_GET_UPTIME_SECONDS - Get the seconds since boot
------------------------------------------------------
+.. rubric:: PARAMETERS:
-CALLING SEQUENCE:
- .. code-block:: c
+``delta``
+ This parameter is the delta value in clock ticks.
- time_t rtems_clock_get_uptime_seconds(void);
+.. rubric:: RETURN VALUES:
-DIRECTIVE STATUS CODES:
- The system uptime in seconds.
+Returns a :term:`clock tick` counter value which is at least ``delta`` clock
+ticks in the future.
-DESCRIPTION:
- This directive returns the seconds since the system was booted.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This directive may be called from an ISR.
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/tick-later-usec
.. raw:: latex
- \clearpage
+ \clearpage
-.. index:: clock get nanoseconds uptime
-.. index:: uptime
-.. index:: rtems_clock_get_uptime_nanoseconds
+.. index:: rtems_clock_tick_later_usec()
+
+.. _InterfaceRtemsClockTickLaterUsec:
+
+rtems_clock_tick_later_usec()
+-----------------------------
-.. _rtems_clock_get_uptime_nanoseconds:
+Gets a :term:`clock tick` value which is at least delta microseconds in the
+future.
-CLOCK_GET_UPTIME_NANOSECONDS - Get the nanoseconds since boot
--------------------------------------------------------------
+.. rubric:: CALLING SEQUENCE:
-CALLING SEQUENCE:
- .. code-block:: c
+.. code-block:: c
- uint64_t rtems_clock_get_uptime_nanoseconds(void);
+ rtems_interval rtems_clock_tick_later_usec( rtems_interval delta_in_usec );
-DIRECTIVE STATUS CODES:
- The system uptime in nanoseconds.
+.. rubric:: PARAMETERS:
-DESCRIPTION:
- This directive returns the nanoseconds since the system was booted.
+``delta_in_usec``
+ This parameter is the delta value in microseconds.
-NOTES:
- This directive may be called from an ISR.
+.. rubric:: RETURN VALUES:
-Removed Directives
-==================
+Returns a :term:`clock tick` counter value which is at least ``delta_in_usec``
+microseconds in the future.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/tick-before
.. raw:: latex
- \clearpage
-
-.. _rtems_clock_get:
-
-CLOCK_GET - Get date and time information
------------------------------------------
-.. index:: obtain the time of day
-.. index:: rtems_clock_get
-
-.. warning::
-
- This directive was removed in RTEMS 5.1. See also
- :ref:`ClockManagerAdviceClockGet`.
-
-CALLING SEQUENCE:
- .. code-block:: c
-
- rtems_status_code rtems_clock_get(
- rtems_clock_get_options option,
- void *time_buffer
- );
-
-DIRECTIVE STATUS CODES:
- .. list-table::
- :class: rtems-table
-
- * - ``RTEMS_SUCCESSFUL``
- - current time obtained successfully
- * - ``RTEMS_NOT_DEFINED``
- - system date and time is not set
- * - ``RTEMS_INVALID_ADDRESS``
- - ``time_buffer`` is NULL
-
-DESCRIPTION:
- This directive obtains the system date and time. If the caller is
- attempting to obtain the date and time (i.e. option is set to either
- ``RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH``, ``RTEMS_CLOCK_GET_TOD``, or
- ``RTEMS_CLOCK_GET_TIME_VALUE``) and the date and time has not been set with
- a previous call to ``rtems_clock_set``, then the ``RTEMS_NOT_DEFINED``
- status code is returned. The caller can always obtain the number of ticks
- per second (option is ``RTEMS_CLOCK_GET_TICKS_PER_SECOND``) and the number
- of ticks since the executive was initialized option is
- ``RTEMS_CLOCK_GET_TICKS_SINCE_BOOT``).
-
- The ``option`` argument may taken on any value of the enumerated type
- ``rtems_clock_get_options``. The data type expected for ``time_buffer`` is
- based on the value of ``option`` as indicated below:
-
- .. index:: rtems_clock_get_options
-
- +-----------------------------------------+---------------------------+
- | Option | Return type |
- +=========================================+===========================+
- | ``RTEMS_CLOCK_GET_TOD`` | ``(rtems_time_of_day *)`` |
- +-----------------------------------------+---------------------------+
- | ``RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH`` | ``(rtems_interval *)`` |
- +-----------------------------------------+---------------------------+
- | ``RTEMS_CLOCK_GET_TICKS_SINCE_BOOT`` | ``(rtems_interval *)`` |
- +-----------------------------------------+---------------------------+
- |``RTEMS_CLOCK_GET_TICKS_PER_SECOND`` | ``(rtems_interval *)`` |
- +-----------------------------------------+---------------------------+
- | ``RTEMS_CLOCK_GET_TIME_VALUE`` | ``(struct timeval *)`` |
- +-----------------------------------------+---------------------------+
-
-NOTES:
- This directive is callable from an ISR.
-
- This directive will not cause the running task to be preempted.
- Re-initializing RTEMS causes the system date and time to be reset to an
- uninitialized state. Another call to ``rtems_clock_set`` is required to
- re-initialize the system date and time to application specific
- specifications.
+ \clearpage
+
+.. index:: rtems_clock_tick_before()
+
+.. _InterfaceRtemsClockTickBefore:
+
+rtems_clock_tick_before()
+-------------------------
+
+Indicates if the current :term:`clock tick` counter is before the ticks.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ bool rtems_clock_tick_before( rtems_interval ticks );
+
+.. rubric:: PARAMETERS:
+
+``ticks``
+ This parameter is the ticks value to check.
+
+.. rubric:: RETURN VALUES:
+
+Returns true, if current :term:`clock tick` counter indicates a time before the
+time in ticks, otherwise returns false.
+
+.. rubric:: NOTES:
+
+This directive can be used to write busy loops with a timeout.
+
+.. code-block:: c
+ :linenos:
+
+ status busy( void )
+ {
+ rtems_interval timeout;
+
+ timeout = rtems_clock_tick_later_usec( 10000 );
+
+ do {
+ if ( ok() ) {
+ return success;
+ }
+ } while ( rtems_clock_tick_before( timeout ) );
+
+ return timeout;
+ }
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
diff --git a/c-user/clock/introduction.rst b/c-user/clock/introduction.rst
index e952d7d..ad4b14c 100644
--- a/c-user/clock/introduction.rst
+++ b/c-user/clock/introduction.rst
@@ -1,36 +1,88 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2014, 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+.. This file is part of the RTEMS quality process and was automatically
+.. generated. If you find something that needs to be fixed or
+.. worded better please post a report or patch to an RTEMS mailing list
+.. or raise a bug report:
+..
+.. https://www.rtems.org/bugs.html
+..
+.. For information on updating and regenerating please refer to the How-To
+.. section in the Software Requirements Engineering chapter of the
+.. RTEMS Software Engineering manual. The manual is provided as a part of
+.. a release. For development sources please refer to the online
+.. documentation at:
+..
+.. https://docs.rtems.org
+
+.. Generated from spec:/rtems/clock/if/group
+
+.. _ClockManagerIntroduction:
+
Introduction
============
-The clock manager provides support for time of day
-and other time related capabilities. The directives provided by
-the clock manager are:
+.. The following list was generated from:
+.. spec:/rtems/clock/if/set
+.. spec:/rtems/clock/if/get-tod
+.. spec:/rtems/clock/if/get-tod-timeval
+.. spec:/rtems/clock/if/get-seconds-since-epoch
+.. spec:/rtems/clock/if/get-ticks-per-second
+.. spec:/rtems/clock/if/get-ticks-since-boot
+.. spec:/rtems/clock/if/get-uptime
+.. spec:/rtems/clock/if/get-uptime-timeval
+.. spec:/rtems/clock/if/get-uptime-seconds
+.. spec:/rtems/clock/if/get-uptime-nanoseconds
+.. spec:/rtems/clock/if/tick-later
+.. spec:/rtems/clock/if/tick-later-usec
+.. spec:/rtems/clock/if/tick-before
+
+The Clock Manager provides support for time of day and other time related
+capabilities. The directives provided by the Clock Manager are:
-- :ref:`rtems_clock_set`
+* :ref:`InterfaceRtemsClockSet` - Sets the :term:`CLOCK_REALTIME` to the time
+ of day.
-- :ref:`rtems_clock_get_tod`
+* :ref:`InterfaceRtemsClockGetTod` - Gets the time of day associated with the
+ current :term:`CLOCK_REALTIME`.
-- :ref:`rtems_clock_get_tod_timeval`
+* :ref:`InterfaceRtemsClockGetTodTimeval` - Gets the seconds and microseconds
+ elapsed since the :term:`Unix epoch` and the current :term:`CLOCK_REALTIME`.
-- :ref:`rtems_clock_get_seconds_since_epoch`
+* :ref:`InterfaceRtemsClockGetSecondsSinceEpoch` - Gets the seconds elapsed
+ since the :term:`RTEMS epoch` and the current :term:`CLOCK_REALTIME`.
-- :ref:`rtems_clock_get_ticks_per_second`
+* :ref:`InterfaceRtemsClockGetTicksPerSecond` - Gets the number of :term:`clock
+ ticks <clock tick>` per second configured for the application.
-- :ref:`rtems_clock_get_ticks_since_boot`
+* :ref:`InterfaceRtemsClockGetTicksSinceBoot` - Gets the number of :term:`clock
+ ticks <clock tick>` since some time point during the system initialization or
+ the last overflow of the clock tick counter.
-- :ref:`rtems_clock_tick_later`
+* :ref:`InterfaceRtemsClockGetUptime` - Gets the seconds and nanoseconds
+ elapsed since some time point during the system initialization using
+ :term:`CLOCK_MONOTONIC`.
-- :ref:`rtems_clock_tick_later_usec`
+* :ref:`InterfaceRtemsClockGetUptimeTimeval` - Gets the seconds and
+ microseconds elapsed since some time point during the system initialization
+ using :term:`CLOCK_MONOTONIC`.
-- :ref:`rtems_clock_tick_before`
+* :ref:`InterfaceRtemsClockGetUptimeSeconds` - Gets the seconds elapsed since
+ some time point during the system initialization using
+ :term:`CLOCK_MONOTONIC`.
-- :ref:`rtems_clock_get_uptime`
+* :ref:`InterfaceRtemsClockGetUptimeNanoseconds` - Gets the nanoseconds elapsed
+ since some time point during the system initialization using
+ :term:`CLOCK_MONOTONIC`.
-- :ref:`rtems_clock_get_uptime_timeval`
+* :ref:`InterfaceRtemsClockTickLater` - Gets a :term:`clock tick` value which
+ is at least delta clock ticks in the future.
-- :ref:`rtems_clock_get_uptime_seconds`
+* :ref:`InterfaceRtemsClockTickLaterUsec` - Gets a :term:`clock tick` value
+ which is at least delta microseconds in the future.
-- :ref:`rtems_clock_get_uptime_nanoseconds`
+* :ref:`InterfaceRtemsClockTickBefore` - Indicates if the current :term:`clock
+ tick` counter is before the ticks.
diff --git a/c-user/glossary.rst b/c-user/glossary.rst
index 65e1fd7..8aa1266 100644
--- a/c-user/glossary.rst
+++ b/c-user/glossary.rst
@@ -121,6 +121,39 @@ Glossary
of elements. It differs from an array in that it is not limited to a
predefined size.
+ Clock Driver
+ The Clock Driver is a driver which provides the :term:`clock tick` and a
+ time counter. The time counter is used to drive the :term:`CLOCK_REALTIME`
+ and :term:`CLOCK_MONOTONIC`. The Clock Driver can be initialized by the
+ application with the :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER` and
+ :ref:`CONFIGURE_MICROSECONDS_PER_TICK` application configuration options.
+
+ clock tick
+ The clock tick is a coarse time measure provided by RTEMS. The
+ :term:`Clock Driver` emits clock ticks at rate specified by the
+ :ref:`CONFIGURE_MICROSECONDS_PER_TICK` application configuration option. In
+ contrast to :term:`CLOCK_REALTIME` and :term:`CLOCK_MONOTONIC`, the clock
+ tick rate is not affected by incremental adjustments.
+
+ CLOCK_MONOTONIC
+ The CLOCK_MONOTONIC is a clock provided by RTEMS which measures the time
+ since an unspecified starting point. In contrast to :term:`CLOCK_REALTIME`,
+ this clock cannot be set. It may be affected by incremental adjustments for
+ example carried out by the :term:`NTP` or the use of a :term:`PPS` signal.
+ See also :term:`CLOCK_REALTIME`, :term:`clock tick`, and
+ :term:`Clock Driver`.
+
+ CLOCK_REALTIME
+ The CLOCK_REALTIME is a clock provided by RTEMS which measures the real time
+ (also known as wall-clock time). It is defined by :term:`POSIX`. In
+ particular, every day is treated as if it contains exactly 86400 seconds and
+ leap seconds are ignored. This clock can be set by the application which may
+ result in time jumps. It may be affected by incremental adjustments for
+ example carried out by the :term:`NTP` or the use of a :term:`PPS` signal.
+ RTEMS can represent time points of this clock in nanoseconds ranging from
+ 1988-01-01T00:00:00.000000000Z to 2514-05-31T01:53:03.999999999Z. See also
+ :term:`CLOCK_MONOTONIC`, :term:`clock tick`, and :term:`Clock Driver`.
+
cluster
We have clustered scheduling in case the set of processors of a system is
partitioned into non-empty pairwise disjoint subsets. These subsets are
@@ -458,6 +491,10 @@ Glossary
non-existent
The state occupied by an uncreated or deleted task.
+ NTP
+ This term is an acronym for
+ `Network Time Protocol <https://en.wikipedia.org/wiki/Network_Time_Protocol>`_.
+
NUMA
This term is an acronym for Non-Uniform Memory Access.
@@ -527,9 +564,17 @@ Glossary
A term used to describe the ease with which software can be rehosted on
another computer.
+ POSIX
+ This term is an acronym for
+ `Portable Operating System Interface <https://en.wikipedia.org/wiki/POSIX>`_.
+
posting
The act of sending an event, message, semaphore, or signal to a task.
+ PPS
+ This term is an acronym for
+ `Pulse-Per-Second <https://en.wikipedia.org/wiki/Pulse-per-second_signal>`_.
+
preempt
The act of forcing a task to relinquish the processor and dispatching to
another task.
@@ -650,6 +695,10 @@ Glossary
RTEMS
This term is an acronym for Real-Time Executive for Multiprocessor Systems.
+ RTEMS epoch
+ The RTEMS epoch is a point in time. It is 1988-01-01T00:00:00Z in
+ `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_ time format.
+
running
The state of a rate monotonic timer while it is being used to delineate a
period. The timer exits this state by either expiring or being canceled.
@@ -910,6 +959,10 @@ Glossary
TTAS
This term is an acronym for Test and Test-And-Set.
+ Unix epoch
+ The Unix epoch is a point in time. It is 1970-01-01T00:00:00Z in
+ `ISO 8601 <https://en.wikipedia.org/wiki/ISO_8601>`_ time format.
+
User Extension Table
A table which contains the entry points for each user extensions.