summaryrefslogtreecommitdiffstats
path: root/c_user/timespec_helpers.rst
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2016-02-18 15:29:28 +1100
committerAmar Takhar <verm@darkbeer.org>2016-05-02 20:51:26 -0400
commit0d86b7111e378286bd61613c363c06cec39d0538 (patch)
treedb53c1ba4c2ac32c0a1420bfc9074f4c2b526445 /c_user/timespec_helpers.rst
parentAdd semaphore attributes figure. (diff)
downloadrtems-docs-0d86b7111e378286bd61613c363c06cec39d0538.tar.bz2
Clean up.
Diffstat (limited to 'c_user/timespec_helpers.rst')
-rw-r--r--c_user/timespec_helpers.rst369
1 files changed, 206 insertions, 163 deletions
diff --git a/c_user/timespec_helpers.rst b/c_user/timespec_helpers.rst
index f8ef9c4..712905b 100644
--- a/c_user/timespec_helpers.rst
+++ b/c_user/timespec_helpers.rst
@@ -1,3 +1,7 @@
+.. COMMENT: COPYRIGHT (c) 2011.
+.. COMMENT: On-Line Applications Research Corporation (OAR).
+.. COMMENT: All rights reserved.
+
Timespec Helpers
################
@@ -9,33 +13,33 @@ instances of the POSIX ``struct timespec`` structure.
The directives provided by the timespec helpers manager are:
-- ``rtems_timespec_set`` - Set timespec's value
+- rtems_timespec_set_ - Set timespec's value
-- ``rtems_timespec_zero`` - Zero timespec's value
+- rtems_timespec_zero_ - Zero timespec's value
-- ``rtems_timespec_is_valid`` - Check if timespec is valid
+- rtems_timespec_is_valid_ - Check if timespec is valid
-- ``rtems_timespec_add_to`` - Add two timespecs
+- rtems_timespec_add_to_ - Add two timespecs
-- ``rtems_timespec_subtract`` - Subtract two timespecs
+- rtems_timespec_subtract_ - Subtract two timespecs
-- ``rtems_timespec_divide`` - Divide two timespecs
+- rtems_timespec_divide_ - Divide two timespecs
-- ``rtems_timespec_divide_by_integer`` - Divide timespec by integer
+- rtems_timespec_divide_by_integer_ - Divide timespec by integer
-- ``rtems_timespec_less_than`` - Less than operator
+- rtems_timespec_less_than_ - Less than operator
-- ``rtems_timespec_greater_than`` - Greater than operator
+- rtems_timespec_greater_than_ - Greater than operator
-- ``rtems_timespec_equal_to`` - Check if two timespecs are equal
+- rtems_timespec_equal_to_ - Check if two timespecs are equal
-- ``rtems_timespec_get_seconds`` - Obtain seconds portion of timespec
+- rtems_timespec_get_seconds_ - Obtain seconds portion of timespec
-- ``rtems_timespec_get_nanoseconds`` - Obtain nanoseconds portion of timespec
+- rtems_timespec_get_nanoseconds_ - Obtain nanoseconds portion of timespec
-- ``rtems_timespec_to_ticks`` - Convert timespec to number of ticks
+- rtems_timespec_to_ticks_ - Convert timespec to number of ticks
-- ``rtems_timespec_from_ticks`` - Convert ticks to timespec
+- rtems_timespec_from_ticks_ - Convert ticks to timespec
Background
==========
@@ -43,11 +47,13 @@ Background
Time Storage Conventions
------------------------
-Time can be stored in many ways. One of them is the ``struct timespec``
-format which is a structure that consists of the fields ``tv_sec``
-to represent seconds and ``tv_nsec`` to represent nanoseconds. The``struct timeval`` structure is simular and consists of seconds (stored
-in ``tv_sec``) and microseconds (stored in ``tv_usec``). Either``struct timespec`` or ``struct timeval`` can be used to represent
-elapsed time, time of executing some operations, or time of day.
+Time can be stored in many ways. One of them is the ``struct timespec`` format
+which is a structure that consists of the fields ``tv_sec`` to represent
+seconds and ``tv_nsec`` to represent nanoseconds. The``struct timeval``
+structure is simular and consists of seconds (stored in ``tv_sec``) and
+microseconds (stored in ``tv_usec``). Either``struct timespec`` or ``struct
+timeval`` can be used to represent elapsed time, time of executing some
+operations, or time of day.
Operations
==========
@@ -55,309 +61,337 @@ Operations
Set and Obtain Timespec Value
-----------------------------
-A user may write a specific time by passing the desired seconds and
-nanoseconds values and the destination ``struct timespec`` using the``rtems_timespec_set`` directive.
+A user may write a specific time by passing the desired seconds and nanoseconds
+values and the destination ``struct timespec`` using the ``rtems_timespec_set``
+directive.
The ``rtems_timespec_zero`` directive is used to zero the seconds
and nanoseconds portions of a ``struct timespec`` instance.
-Users may obtain the seconds or nanoseconds portions of a ``struct
-timespec`` instance with the ``rtems_timespec_get_seconds`` or``rtems_timespec_get_nanoseconds`` methods, respectively.
+Users may obtain the seconds or nanoseconds portions of a ``struct timespec``
+instance with the ``rtems_timespec_get_seconds`` or
+``rtems_timespec_get_nanoseconds`` methods, respectively.
Timespec Math
-------------
-A user can perform multiple operations on ``struct timespec``
-instances. The helpers in this manager assist in adding, subtracting, and
-performing divison on ``struct timespec`` instances.
+A user can perform multiple operations on ``struct timespec`` instances. The
+helpers in this manager assist in adding, subtracting, and performing divison
+on ``struct timespec`` instances.
-- Adding two ``struct timespec`` can be done using the``rtems_timespec_add_to`` directive. This directive is used mainly
- to calculate total amount of time consumed by multiple operations.
+- Adding two ``struct timespec`` can be done using the
+ ``rtems_timespec_add_to`` directive. This directive is used mainly to
+ calculate total amount of time consumed by multiple operations.
-- The ``rtems_timespec_subtract`` is used to subtract two``struct timespecs`` instances and determine the elapsed time between
- those two points in time.
+- The ``rtems_timespec_subtract`` is used to subtract two ``struct timespecs``
+ instances and determine the elapsed time between those two points in time.
-- The ``rtems_timespec_divide`` is used to use to divide one``struct timespec`` instance by another. This calculates the percentage
- with a precision to three decimal points.
+- The ``rtems_timespec_divide`` is used to use to divide one ``struct
+ timespec`` instance by another. This calculates the percentage with a
+ precision to three decimal points.
-- The ``rtems_timespec_divide_by_integer`` is used to divide a``struct timespec`` instance by an integer. It is commonly used in
- benchmark calculations to dividing duration by the number of iterations
- performed.
+- The ``rtems_timespec_divide_by_integer`` is used to divide a ``struct
+ timespec`` instance by an integer. It is commonly used in benchmark
+ calculations to dividing duration by the number of iterations performed.
Comparing struct timespec Instances
-----------------------------------
-A user can compare two ``struct timespec`` instances using the``rtems_timespec_less_than``, ``rtems_timespec_greater_than``
-or ``rtems_timespec_equal_to`` routines.
+A user can compare two ``struct timespec`` instances using the
+``rtems_timespec_less_than``, ``rtems_timespec_greater_than`` or
+``rtems_timespec_equal_to`` routines.
Conversions and Validity Check
------------------------------
-Conversion to and from clock ticks may be performed by using the``rtems_timespec_to_ticks`` and ``rtems_timespec_from_ticks``
-directives.
+Conversion to and from clock ticks may be performed by using the
+``rtems_timespec_to_ticks`` and ``rtems_timespec_from_ticks`` directives.
-User can also check validity of timespec with``rtems_timespec_is_valid`` routine.
+User can also check validity of timespec with ``rtems_timespec_is_valid``
+routine.
Directives
==========
-This section details the Timespec Helpers 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 Timespec Helpers 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.
+
+.. _rtems_timespec_set:
TIMESPEC_SET - Set struct timespec Instance
-------------------------------------------
+.. index:: set struct timespec instance
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_set
+
+.. code-block:: c
void rtems_timespec_set(
- struct timespec \*time,
- time_t seconds,
- uint32_t nanoseconds
+ struct timespec *time,
+ time_t seconds,
+ uint32_t nanoseconds
);
-.. index:: rtems_timespec_set
-
**STATUS CODES:**
NONE
**DESCRIPTION:**
-This directive sets the ``struct timespec`` ``time`` value to the
-desired ``seconds`` and ``nanoseconds`` values.
+This directive sets the ``struct timespec`` *time* to the desired ``seconds``
+and ``nanoseconds`` values.
**NOTES:**
-This method does NOT check if ``nanoseconds`` is less than the
-maximum number of nanoseconds in a second.
+This method does NOT check if ``nanoseconds`` is less than the maximum number
+of nanoseconds in a second.
+
+.. _rtems_timespec_zero:
TIMESPEC_ZERO - Zero struct timespec Instance
---------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_zero
+
+.. code-block:: c
void rtems_timespec_zero(
- struct timespec \*time
+ struct timespec *time
);
-.. index:: rtems_timespec_zero
-
**STATUS CODES:**
NONE
**DESCRIPTION:**
-This routine sets the contents of the ``struct timespec`` instance``time`` to zero.
+This routine sets the contents of the ``struct timespec`` instance ``time`` to
+zero.
**NOTES:**
NONE
+.. _rtems_timespec_is_valid:
+
TIMESPEC_IS_VALID - Check validity of a struct timespec instance
----------------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_is_valid
+
+.. code-block:: c
bool rtems_timespec_is_valid(
- const struct timespec \*time
+ const struct timespec *time
);
-.. index:: rtems_timespec_is_valid
-
**STATUS CODES:**
-This method returns ``true`` if the instance is valid, and ``false``
-otherwise.
+This method returns ``true`` if the instance is valid, and ``false`` otherwise.
**DESCRIPTION:**
-This routine check validity of a ``struct timespec`` instance. It
-checks if the nanoseconds portion of the ``struct timespec`` instanceis
-in allowed range (less than the maximum number of nanoseconds per second).
+This routine check validity of a ``struct timespec`` instance. It checks if the
+nanoseconds portion of the ``struct timespec`` instanceis in allowed range
+(less than the maximum number of nanoseconds per second).
**NOTES:**
+.. _rtems_timespec_add_to:
+
TIMESPEC_ADD_TO - Add Two struct timespec Instances
---------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_add_to
+
+.. code-block:: c
uint32_t rtems_timespec_add_to(
- struct timespec \*time,
- const struct timespec \*add
+ struct timespec *time,
+ const struct timespec *add
);
-.. index:: rtems_timespec_add_to
-
**STATUS CODES:**
The method returns the number of seconds ``time`` increased by.
**DESCRIPTION:**
-This routine adds two ``struct timespec`` instances. The second argument is added to the first. The parameter ``time`` is the base time to which the ``add`` parameter is added.
+This routine adds two ``struct timespec`` instances. The second argument is
+added to the first. The parameter ``time`` is the base time to which the
+``add`` parameter is added.
**NOTES:**
NONE
+.. _rtems_timespec_subtract:
+
TIMESPEC_SUBTRACT - Subtract Two struct timespec Instances
----------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_subtract
+
+.. code-block:: c
void rtems_timespec_subtract(
- const struct timespec \*start,
- const struct timespec \*end,
- struct timespec \*result
+ const struct timespec *start,
+ const struct timespec *end,
+ struct timespec *result
);
-.. index:: rtems_timespec_subtract
-
**STATUS CODES:**
NONE
**DESCRIPTION:**
-This routine subtracts ``start`` from ``end`` saves the difference
-in ``result``. The primary use of this directive is to calculate
-elapsed time.
+This routine subtracts ``start`` from ``end`` saves the difference in
+``result``. The primary use of this directive is to calculate elapsed time.
**NOTES:**
-It is possible to subtract when ``end`` is less than ``start``
-and it produce negative ``result``. When doing this you should be
-careful and remember that only the seconds portion of a ``struct
-timespec`` instance is signed, which means that nanoseconds portion is
-always increasing. Due to that when your timespec has seconds = -1 and
-nanoseconds=500,000,000 it means that result is -0.5 second, NOT the
-expected -1.5!
+It is possible to subtract when ``end`` is less than ``start`` and it produce
+negative ``result``. When doing this you should be careful and remember that
+only the seconds portion of a ``struct timespec`` instance is signed, which
+means that nanoseconds portion is always increasing. Due to that when your
+timespec has seconds = -1 and nanoseconds = 500,000,000 it means that result is
+-0.5 second, NOT the expected -1.5!
+
+.. _rtems_timespec_divide:
TIMESPEC_DIVIDE - Divide Two struct timespec Instances
------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_divide
+
+.. code-block:: c
void rtems_timespec_divide(
- const struct timespec \*lhs,
- const struct timespec \*rhs,
- uint32_t \*ival_percentage,
- uint32_t \*fval_percentage
+ const struct timespec *lhs,
+ const struct timespec *rhs,
+ uint32_t *ival_percentage,
+ uint32_t *fval_percentage
);
-.. index:: rtems_timespec_divide
-
**STATUS CODES:**
NONE
**DESCRIPTION:**
-This routine divides the ``struct timespec`` instance ``lhs`` by
-the ``struct timespec`` instance ``rhs``. The result is returned
-in the ``ival_percentage`` and ``fval_percentage``, representing
-the integer and fractional results of the division respectively.
+This routine divides the ``struct timespec`` instance ``lhs`` by the ``struct
+timespec`` instance ``rhs``. The result is returned in the ``ival_percentage``
+and ``fval_percentage``, representing the integer and fractional results of the
+division respectively.
-The ``ival_percentage`` is integer value of calculated percentage and ``fval_percentage`` is fractional part of calculated percentage.
+The ``ival_percentage`` is integer value of calculated percentage and
+``fval_percentage`` is fractional part of calculated percentage.
**NOTES:**
The intended use is calculating percentges to three decimal points.
-When dividing by zero, this routine return both ``ival_percentage``
-and ``fval_percentage`` equal zero.
+When dividing by zero, this routine return both ``ival_percentage`` and
+``fval_percentage`` equal zero.
The division is performed using exclusively integer operations.
+.. _rtems_timespec_divide_by_integer:
+
TIMESPEC_DIVIDE_BY_INTEGER - Divide a struct timespec Instance by an Integer
----------------------------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_divide_by_integer
+
+.. code-block:: c
int rtems_timespec_divide_by_integer(
- const struct timespec \*time,
- uint32_t iterations,
- struct timespec \*result
+ const struct timespec *time,
+ uint32_t iterations,
+ struct timespec *result
);
-.. index:: rtems_timespec_divide_by_integer
-
**STATUS CODES:**
NONE
**DESCRIPTION:**
-This routine divides the ``struct timespec`` instance ``time`` by the integer value ``iterations``.
-The result is saved in ``result``.
+This routine divides the ``struct timespec`` instance ``time`` by the integer
+value ``iterations``. The result is saved in ``result``.
**NOTES:**
-The expected use is to assist in benchmark calculations where you
-typically divide a duration (``time``) by a number of iterations what
-gives average time.
+The expected use is to assist in benchmark calculations where you typically
+divide a duration (``time``) by a number of iterations what gives average time.
+
+.. _rtems_timespec_less_than:
TIMESPEC_LESS_THAN - Less than operator
---------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_less_than
+
+.. code-block:: c
bool rtems_timespec_less_than(
- const struct timespec \*lhs,
- const struct timespec \*rhs
+ const struct timespec *lhs,
+ const struct timespec *rhs
);
-.. index:: rtems_timespec_less_than
-
**STATUS CODES:**
-This method returns ``struct true`` if ``lhs`` is less than``rhs`` and ``struct false`` otherwise.
+This method returns ``struct true`` if ``lhs`` is less than``rhs`` and ``struct
+false`` otherwise.
**DESCRIPTION:**
-This method is the less than operator for ``struct timespec`` instances. The first parameter is the left hand side and the second is the right hand side of the comparison.
+This method is the less than operator for ``struct timespec`` instances. The
+first parameter is the left hand side and the second is the right hand side of
+the comparison.
**NOTES:**
NONE
+.. _rtems_timespec_greater_than:
+
TIMESPEC_GREATER_THAN - Greater than operator
---------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_greater_than
+
+.. code-block:: c
bool rtems_timespec_greater_than(
- const struct timespec \*_lhs,
- const struct timespec \*_rhs
+ const struct timespec *_lhs,
+ const struct timespec *_rhs
);
-.. index:: rtems_timespec_greater_than
-
**STATUS CODES:**
-This method returns ``struct true`` if ``lhs`` is greater than``rhs`` and ``struct false`` otherwise.
+This method returns ``struct true`` if ``lhs`` is greater than``rhs`` and
+``struct false`` otherwise.
**DESCRIPTION:**
@@ -367,23 +401,26 @@ This method is greater than operator for ``struct timespec`` instances.
NONE
+.. _rtems_timespec_equal_to:
+
TIMESPEC_EQUAL_TO - Check equality of timespecs
-----------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_equal_to
+
+.. code-block:: c
bool rtems_timespec_equal_to(
- const struct timespec \*lhs,
- const struct timespec \*rhs
+ const struct timespec *lhs,
+ const struct timespec *rhs
);
-.. index:: rtems_timespec_equal_to
-
**STATUS CODES:**
-This method returns ``struct true`` if ``lhs`` is equal to``rhs`` and ``struct false`` otherwise.
+This method returns ``struct true`` if ``lhs`` is equal to``rhs`` and ``struct
+false`` otherwise.
**DESCRIPTION:**
@@ -393,45 +430,50 @@ This method is equality operator for ``struct timespec`` instances.
NONE
+.. _rtems_timespec_get_seconds:
+
TIMESPEC_GET_SECONDS - Get Seconds Portion of struct timespec Instance
----------------------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_get_seconds
+
+.. code-block:: c
time_t rtems_timespec_get_seconds(
- struct timespec \*time
+ struct timespec *time
);
-.. index:: rtems_timespec_get_seconds
-
**STATUS CODES:**
-This method returns the seconds portion of the specified ``struct
-timespec`` instance.
+This method returns the seconds portion of the specified ``struct timespec``
+instance.
**DESCRIPTION:**
-This method returns the seconds portion of the specified ``struct timespec`` instance ``time``.
+This method returns the seconds portion of the specified ``struct timespec``
+instance ``time``.
**NOTES:**
NONE
+.. _rtems_timespec_get_nanoseconds:
+
TIMESPEC_GET_NANOSECONDS - Get Nanoseconds Portion of the struct timespec Instance
----------------------------------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_get_nanoseconds
+
+.. code-block:: c
uint32_t rtems_timespec_get_nanoseconds(
- struct timespec \*_time
+ struct timespec *_time
);
-.. index:: rtems_timespec_get_nanoseconds
-
**STATUS CODES:**
This method returns the nanoseconds portion of the specified ``struct
@@ -439,46 +481,53 @@ timespec`` instance.
**DESCRIPTION:**
-This method returns the nanoseconds portion of the specified timespec
-which is pointed by ``_time``.
+This method returns the nanoseconds portion of the specified timespec which is
+pointed by ``_time``.
**NOTES:**
+.. _rtems_timespec_to_ticks:
+
TIMESPEC_TO_TICKS - Convert struct timespec Instance to Ticks
-------------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_to_ticks
+
+.. code-block:: c
uint32_t rtems_timespec_to_ticks(
- const struct timespec \*time
+ const struct timespec *time
);
-.. index:: rtems_timespec_to_ticks
-
**STATUS CODES:**
This directive returns the number of ticks computed.
**DESCRIPTION:**
-This directive converts the ``time`` timespec to the corresponding number of clock ticks.
+This directive converts the ``time`` timespec to the corresponding number of
+clock ticks.
**NOTES:**
NONE
+.. _rtems_timespec_from_ticks:
+
TIMESPEC_FROM_TICKS - Convert Ticks to struct timespec Representation
---------------------------------------------------------------------
**CALLING SEQUENCE:**
-.. code:: c
+.. index:: rtems_timespec_from_ticks
+
+.. code-block:: c
void rtems_timespec_from_ticks(
- uint32_t ticks,
- struct timespec \*time
+ uint32_t ticks,
+ struct timespec *time
);
.. index:: rtems_timespec_from_ticks
@@ -489,15 +538,9 @@ NONE
**DESCRIPTION:**
-This routine converts the ``ticks`` to the corresponding ``struct timespec`` representation and stores it in ``time``.
+This routine converts the ``ticks`` to the corresponding ``struct timespec``
+representation and stores it in ``time``.
**NOTES:**
NONE
-
-.. COMMENT: COPYRIGHT (c) 2011.
-
-.. COMMENT: On-Line Applications Research Corporation (OAR).
-
-.. COMMENT: All rights reserved.
-