Update due to clock manager and driver changes

This commit is contained in:
Sebastian Huber 2016-11-02 08:13:31 +01:00
parent 72a62ad88f
commit 3a58bff6bf
7 changed files with 28 additions and 109 deletions

View File

@ -149,7 +149,7 @@ Clock Tick Device Driver
------------------------
Most RTEMS applications will include a clock tick device driver which invokes
the ``rtems_clock_tick`` directive at regular intervals. The clock tick is
a clock tick directive at regular intervals. The clock tick is
necessary if the application is to utilize timeslicing, the clock manager, the
timer manager, the rate monotonic manager, or the timeout option on blocking
directives.
@ -163,7 +163,7 @@ overhead required to manipulate the counter/timer in the clock tick ISR and
increases the accuracy of tick occurrences. The initial count can be based on
the microseconds_per_tick field in the RTEMS Configuration Table. An alternate
approach is to set the initial count for a fixed time period (such as one
millisecond) and have the ISR invoke ``rtems_clock_tick`` on the configured
millisecond) and have the ISR invoke a clock tick directive on the configured
``microseconds_per_tick`` boundaries. Obviously, this can induce some error if
the configured ``microseconds_per_tick`` is not evenly divisible by the chosen
clock interrupt quantum.

View File

@ -44,10 +44,6 @@ the clock manager are:
- rtems_clock_get_uptime_nanoseconds_ - Get nanoseconds since boot
- rtems_clock_set_nanoseconds_extension_ - Install the nanoseconds since last tick handler
- rtems_clock_tick_ - Announce a clock tick
Background
==========
@ -56,7 +52,7 @@ Required Support
For the features provided by the clock manager to be utilized, periodic timer
interrupts are required. Therefore, a real-time clock or hardware timer is
necessary to create the timer interrupts. The ``rtems_clock_tick`` directive
necessary to create the timer interrupts. The clock tick directive
is normally called by the timer ISR to announce to RTEMS that a system clock
tick has occurred. Elapsed time is measured in ticks. A tick is defined to be
an integral number of microseconds which is specified by the user in the
@ -113,7 +109,7 @@ The system's timeslice is defined as an integral number of ticks, and is
specified in the Configuration Table. The timeslice is defined for the entire
system of tasks, but timeslicing is enabled and disabled on a per task basis.
The ``rtems_clock_tick`` directive implements timeslicing by decrementing the
The clock tick directives implement timeslicing by decrementing the
running task's time-remaining counter when both timeslicing and preemption are
enabled. If the task's timeslice has expired, then that task will be preempted
if there exists a ready task of equal priority.
@ -145,17 +141,19 @@ Operations
Announcing a Tick
-----------------
RTEMS provides the ``rtems_clock_tick`` directive which is called from the
user's real-time clock ISR to inform RTEMS that a tick has elapsed. The tick
frequency value, defined in microseconds, is a configuration parameter found in
the Configuration Table. RTEMS divides one million microseconds (one second)
by the number of microseconds per tick to determine the number of calls to the
``rtems_clock_tick`` directive per second. The frequency of
``rtems_clock_tick`` calls determines the resolution (granularity) for all time
dependent RTEMS actions. For example, calling ``rtems_clock_tick`` ten times
per second yields a higher resolution than calling ``rtems_clock_tick`` two
times per second. The ``rtems_clock_tick`` directive is responsible for
maintaining both calendar time and the dynamic set of timers.
RTEMS provides the several clock tick directives which are called from the
user's real-time clock ISR to inform RTEMS that a tick has elapsed. Depending
on the timer hardware capabilities the clock driver must choose the most
appropriate clock tick directive. The tick frequency value, defined in
microseconds, is a configuration parameter found in the Configuration Table.
RTEMS divides one million microseconds (one second) by the number of
microseconds per tick to determine the number of calls to the clock tick
directive per second. The frequency of clock tick calls determines the
resolution (granularity) for all time dependent RTEMS actions. For example,
calling the clock tick directive ten times per second yields a higher
resolution than calling the clock tick two times per second. The clock tick
directives are responsible for maintaining both calendar time and the dynamic
set of timers.
Setting the Time
----------------
@ -725,83 +723,3 @@ This directive returns the nanoseconds since the system was booted.
**NOTES:**
This directive may be called from an ISR.
.. _rtems_clock_set_nanoseconds_extension:
CLOCK_SET_NANOSECONDS_EXTENSION - Install the nanoseconds since last tick handler
---------------------------------------------------------------------------------
.. index:: clock set nanoseconds extension
.. index:: nanoseconds extension
.. index:: nanoseconds time accuracy
**CALLING SEQUENCE:**
.. index:: rtems_clock_set_nanoseconds_extension
.. code-block:: c
rtems_status_code rtems_clock_set_nanoseconds_extension(
rtems_nanoseconds_extension_routine routine
);
**DIRECTIVE STATUS CODES:**
``RTEMS_SUCCESSFUL``
clock tick processed successfully
``RTEMS_INVALID_ADDRESS``
``time_buffer`` is NULL
**DESCRIPTION:**
This directive is used by the Clock device driver to install the ``routine``
which will be invoked by the internal RTEMS method used to obtain a highly
accurate time of day. It is usually called during the initialization of the
driver.
When the ``routine`` is invoked, it will determine the number of nanoseconds
which have elapsed since the last invocation of the ``rtems_clock_tick``
directive. It should do this as quickly as possible with as little impact as
possible on the device used as a clock source.
**NOTES:**
This directive may be called from an ISR.
This directive is called as part of every service to obtain the current date
and time as well as timestamps.
.. _rtems_clock_tick:
CLOCK_TICK - Announce a clock tick
----------------------------------
.. index:: clock tick
**CALLING SEQUENCE:**
.. index:: rtems_clock_tick
.. code-block:: c
rtems_status_code rtems_clock_tick( void );
**DIRECTIVE STATUS CODES:**
``RTEMS_SUCCESSFUL``
clock tick processed successfully
**DESCRIPTION:**
This directive announces to RTEMS that a system clock tick has occurred. The
directive is usually called from the timer interrupt ISR of the local
processor. This directive maintains the system date and time, decrements
timers for delayed tasks, timeouts, rate monotonic periods, and implements
timeslicing.
**NOTES:**
This directive is typically called from an ISR.
The ``microseconds_per_tick`` and ``ticks_per_timeslice`` parameters in the
Configuration Table contain the number of microseconds per tick and number of
ticks per timeslice, respectively.

View File

@ -4481,7 +4481,7 @@ wishes to include the Clock Device Driver.
**NOTES:**
This device driver is responsible for providing a regular interrupt which
invokes the ``rtems_clock_tick`` directive.
invokes a clock tick directive.
If neither the Clock Driver not Benchmark Timer is enabled and the
configuration parameter ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is

View File

@ -673,8 +673,8 @@ Glossary
:dfn:`tick`
The basic unit of time used by RTEMS. It is a user-configurable number of
microseconds. The current tick expires when the ``rtems_clock_tick``
directive is invoked.
microseconds. The current tick expires when a clock tick directive is
invoked.
:dfn:`tightly-coupled`
A multiprocessor configuration system which communicates via shared memory.

View File

@ -195,8 +195,9 @@ is a list of RTEMS system calls that may be made from an ISR:
- rtems_clock_get_ticks_per_second
- rtems_clock_get_ticks_since_boot
- rtems_clock_get_uptime
- rtems_clock_set_nanoseconds_extension
- rtems_clock_tick
- rtems_timecounter_tick
- rtems_timecounter_simple_downcounter_tick
- rtems_timecounter_simple_upcounter_tick
- Timer Management

View File

@ -1384,7 +1384,7 @@ TASK_WAKE_AFTER - Wake up after interval
This directive blocks the calling task for the specified number of system clock
ticks. When the requested interval has elapsed, the task is made ready. The
``rtems_clock_tick`` directive automatically updates the delay period.
clock tick directives automatically updates the delay period.
**NOTES:**

View File

@ -48,10 +48,10 @@ Timers
A timer is an RTEMS object which allows the application to schedule operations
to occur at specific times in the future. User supplied timer service routines
are invoked by either the ``rtems_clock_tick`` directive or a special Timer
are invoked by either a clock tick directive or a special Timer
Server task when the timer fires. Timer service routines may perform any
operations or directives which normally would be performed by the application
code which invoked the ``rtems_clock_tick`` directive.
code which invoked a clock tick directive.
The timer can be used to implement watchdog routines which only fire to denote
that an application error has occurred. The timer is reset at specific points
@ -129,7 +129,7 @@ Initiating an Interval Timer
The ``rtems_timer_fire_after`` and ``rtems_timer_server_fire_after`` directives
initiate a timer to fire a user provided timer service routine after the
specified number of clock ticks have elapsed. When the interval has elapsed,
the timer service routine will be invoked from the ``rtems_clock_tick``
the timer service routine will be invoked from a clock tick
directive if it was initiated by the ``rtems_timer_fire_after`` directive and
from the Timer Server task if initiated by the
``rtems_timer_server_fire_after`` directive.
@ -140,7 +140,7 @@ Initiating a Time of Day Timer
The ``rtems_timer_fire_when`` and ``rtems_timer_server_fire_when`` directive
initiate a timer to fire a user provided timer service routine when the
specified time of day has been reached. When the interval has elapsed, the
timer service routine will be invoked from the ``rtems_clock_tick`` directive
timer service routine will be invoked from a clock tick directive
by the ``rtems_timer_fire_when`` directive and from the Timer Server task if
initiated by the ``rtems_timer_server_fire_when`` directive.