ChibiOS  21.6.0
Collaboration diagram for Virtual Timers:

Detailed Description

Time and Virtual Timers related APIs and services.

Functions

static void vt_insert_first (virtual_timers_list_t *vtlp, virtual_timer_t *vtp, systime_t now, sysinterval_t delay)
 Inserts a timer as first element in a delta list. More...
 
static void vt_enqueue (virtual_timers_list_t *vtlp, virtual_timer_t *vtp, systime_t now, sysinterval_t delay)
 Enqueues a virtual timer in a virtual timers list. More...
 
void chVTDoSetI (virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par)
 Enables a one-shot virtual timer. More...
 
void chVTDoSetContinuousI (virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par)
 Enables a continuous virtual timer. More...
 
void chVTDoResetI (virtual_timer_t *vtp)
 Disables a Virtual Timer. More...
 
sysinterval_t chVTGetRemainingIntervalI (virtual_timer_t *vtp)
 Returns the remaining time interval before next timer trigger. More...
 
void chVTDoTickI (void)
 Virtual timers ticker. More...
 
systimestamp_t chVTGetTimeStampI (void)
 Generates a monotonic time stamp. More...
 
void chVTResetTimeStampI (void)
 Resets and re-synchronizes the time stamps monotonic counter. More...
 
static void chVTObjectInit (virtual_timer_t *vtp)
 Initializes a virtual_timer_t object. More...
 
static systime_t chVTGetSystemTimeX (void)
 Current system time. More...
 
static systime_t chVTGetSystemTime (void)
 Current system time. More...
 
static sysinterval_t chVTTimeElapsedSinceX (systime_t start)
 Returns the elapsed time since the specified start time. More...
 
static bool chVTIsSystemTimeWithinX (systime_t start, systime_t end)
 Checks if the current system time is within the specified time window. More...
 
static bool chVTIsSystemTimeWithin (systime_t start, systime_t end)
 Checks if the current system time is within the specified time window. More...
 
static bool chVTGetTimersStateI (sysinterval_t *timep)
 Returns the time interval until the next timer event. More...
 
static bool chVTIsArmedI (const virtual_timer_t *vtp)
 Returns true if the specified timer is armed. More...
 
static bool chVTIsArmed (const virtual_timer_t *vtp)
 Returns true if the specified timer is armed. More...
 
static void chVTResetI (virtual_timer_t *vtp)
 Disables a Virtual Timer. More...
 
static void chVTReset (virtual_timer_t *vtp)
 Disables a Virtual Timer. More...
 
static void chVTSetI (virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par)
 Enables a one-shot virtual timer. More...
 
static void chVTSet (virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par)
 Enables a one-shot virtual timer. More...
 
static void chVTSetContinuousI (virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par)
 Enables a continuous virtual timer. More...
 
static void chVTSetContinuous (virtual_timer_t *vtp, sysinterval_t delay, vtfunc_t vtfunc, void *par)
 Enables a continuous virtual timer. More...
 
static sysinterval_t chVTGetReloadIntervalX (virtual_timer_t *vtp)
 Returns the current reload value. More...
 
static void chVTSetReloadIntervalX (virtual_timer_t *vtp, sysinterval_t reload)
 Changes a timer reload time interval. More...
 
static systimestamp_t chVTGetTimeStamp (void)
 Generates a monotonic time stamp. More...
 
static void chVTResetTimeStamp (void)
 Resets and re-synchronizes the time stamps monotonic counter. More...
 
static void __vt_object_init (virtual_timers_list_t *vtlp)
 Virtual Timers instance initialization. More...
 

Function Documentation

◆ vt_insert_first()

static void vt_insert_first ( virtual_timers_list_t vtlp,
virtual_timer_t vtp,
systime_t  now,
sysinterval_t  delay 
)
static

Inserts a timer as first element in a delta list.

Note
This is the special case when the delta list is initially empty.

Definition at line 56 of file chvt.c.

References ch_dlist_insert_after(), ch_virtual_timer::dlist, ch_virtual_timers_list::dlist, and ch_virtual_timers_list::lasttime.

Referenced by vt_enqueue().

Here is the call graph for this function:

◆ vt_enqueue()

static void vt_enqueue ( virtual_timers_list_t vtlp,
virtual_timer_t vtp,
systime_t  now,
sysinterval_t  delay 
)
static

Enqueues a virtual timer in a virtual timers list.

Definition at line 90 of file chvt.c.

References ch_dlist_isempty(), chTimeDiffX, ch_virtual_timers_list::dlist, ch_virtual_timers_list::lasttime, and vt_insert_first().

Here is the call graph for this function:

◆ chVTDoSetI()

void chVTDoSetI ( virtual_timer_t vtp,
sysinterval_t  delay,
vtfunc_t  vtfunc,
void *  par 
)

Enables a one-shot virtual timer.

The timer is enabled and programmed to trigger after the delay specified as parameter.

Precondition
The timer must not be already armed before calling this function.
Note
The callback function is invoked from interrupt context.
Parameters
[out]vtpthe virtual_timer_t structure pointer
[in]delaythe number of ticks before the operation timeouts, the special values are handled as follow:
  • TIME_INFINITE is allowed but interpreted as a normal time specification.
  • TIME_IMMEDIATE this value is not allowed.
[in]vtfuncthe timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
[in]para parameter that will be passed to the callback function
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 179 of file chvt.c.

References currcore.

Referenced by chVTSetI().

◆ chVTDoSetContinuousI()

void chVTDoSetContinuousI ( virtual_timer_t vtp,
sysinterval_t  delay,
vtfunc_t  vtfunc,
void *  par 
)

Enables a continuous virtual timer.

The timer is enabled and programmed to trigger after the delay specified as parameter.

Precondition
The timer must not be already armed before calling this function.
Note
The callback function is invoked from interrupt context.
Parameters
[out]vtpthe virtual_timer_t structure pointer
[in]delaythe number of ticks before the operation timeouts, the special values are handled as follow:
  • TIME_INFINITE is allowed but interpreted as a normal time specification.
  • TIME_IMMEDIATE this value is not allowed.
[in]vtfuncthe timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
[in]para parameter that will be passed to the callback function
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 217 of file chvt.c.

References currcore.

Referenced by chVTSetContinuousI().

◆ chVTDoResetI()

void chVTDoResetI ( virtual_timer_t vtp)

Disables a Virtual Timer.

Precondition
The timer must be in armed state before calling this function.
Parameters
[in]vtpthe virtual_timer_t structure pointer
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 241 of file chvt.c.

References currcore.

Referenced by chVTResetI().

◆ chVTGetRemainingIntervalI()

sysinterval_t chVTGetRemainingIntervalI ( virtual_timer_t vtp)

Returns the remaining time interval before next timer trigger.

Note
This function can be called while the timer is active.
Parameters
[in]vtpthe virtual_timer_t structure pointer
Returns
The remaining time interval.
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 337 of file chvt.c.

References currcore.

◆ chVTDoTickI()

void chVTDoTickI ( void  )

Virtual timers ticker.

Note
The system lock is released before entering the callback and re-acquired immediately after. It is callback's responsibility to acquire the lock if needed. This is done in order to reduce interrupts jitter when many timers are in use.
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 377 of file chvt.c.

References currcore.

◆ chVTGetTimeStampI()

systimestamp_t chVTGetTimeStampI ( void  )

Generates a monotonic time stamp.

This function generates a monotonic time stamp synchronized with the system time. The time stamp has the same resolution of system time.

Note
There is an assumption, this function must be called at least once before the system time wraps back to zero or synchronization is lost. You may use a periodic virtual timer with a very large interval in order to keep time stamps synchronized by calling this function.
Returns
The time stamp.
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 562 of file chvt.c.

References currcore.

Referenced by chVTGetTimeStamp().

◆ chVTResetTimeStampI()

void chVTResetTimeStampI ( void  )

Resets and re-synchronizes the time stamps monotonic counter.

Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 593 of file chvt.c.

◆ chVTObjectInit()

static void chVTObjectInit ( virtual_timer_t vtp)
inlinestatic

Initializes a virtual_timer_t object.

Note
Initializing a timer object is not strictly required because the function chVTSetI() initializes the object too. This function is only useful if you need to perform a chVTIsArmed() check before calling chVTSetI().
Parameters
[out]vtpthe virtual_timer_t structure pointer
Function Class:
Initializer, this function just initializes an object and can be invoked before the kernel is initialized.

Definition at line 104 of file chvt.h.

References ch_virtual_timer::dlist, and ch_delta_list::next.

◆ chVTGetSystemTimeX()

static systime_t chVTGetSystemTimeX ( void  )
inlinestatic

Current system time.

Returns the number of system ticks since the chSysInit() invocation.

Note
The counter can reach its maximum and then restart from zero.
This function can be called from any context but its atomicity is not guaranteed on architectures whose word size is less than systime_t size.
Returns
The system time in ticks.
Function Class:
This is an X-Class API, this function can be invoked from any context.

Definition at line 122 of file chvt.h.

References currcore.

Referenced by __vt_object_init(), chVTGetSystemTime(), chVTIsSystemTimeWithinX(), and chVTTimeElapsedSinceX().

◆ chVTGetSystemTime()

static systime_t chVTGetSystemTime ( void  )
inlinestatic

Current system time.

Returns the number of system ticks since the chSysInit() invocation.

Note
The counter can reach its maximum and then restart from zero.
Returns
The system time in ticks.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 141 of file chvt.h.

References chSysLock, chSysUnlock, and chVTGetSystemTimeX().

Referenced by chVTIsSystemTimeWithin().

Here is the call graph for this function:

◆ chVTTimeElapsedSinceX()

static sysinterval_t chVTTimeElapsedSinceX ( systime_t  start)
inlinestatic

Returns the elapsed time since the specified start time.

Parameters
[in]startstart time
Returns
The elapsed time.
Function Class:
This is an X-Class API, this function can be invoked from any context.

Definition at line 159 of file chvt.h.

References chTimeDiffX, and chVTGetSystemTimeX().

Here is the call graph for this function:

◆ chVTIsSystemTimeWithinX()

static bool chVTIsSystemTimeWithinX ( systime_t  start,
systime_t  end 
)
inlinestatic

Checks if the current system time is within the specified time window.

Note
When start==end then the function returns always false because the time window has zero size.
Parameters
[in]startthe start of the time window (inclusive)
[in]endthe end of the time window (non inclusive)
Return values
truecurrent time within the specified time window.
falsecurrent time not within the specified time window.
Function Class:
This is an X-Class API, this function can be invoked from any context.

Definition at line 177 of file chvt.h.

References chTimeIsInRangeX(), and chVTGetSystemTimeX().

Here is the call graph for this function:

◆ chVTIsSystemTimeWithin()

static bool chVTIsSystemTimeWithin ( systime_t  start,
systime_t  end 
)
inlinestatic

Checks if the current system time is within the specified time window.

Note
When start==end then the function returns always false because the time window has zero size.
Parameters
[in]startthe start of the time window (inclusive)
[in]endthe end of the time window (non inclusive)
Return values
truecurrent time within the specified time window.
falsecurrent time not within the specified time window.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 195 of file chvt.h.

References chTimeIsInRangeX(), and chVTGetSystemTime().

Here is the call graph for this function:

◆ chVTGetTimersStateI()

static bool chVTGetTimersStateI ( sysinterval_t timep)
inlinestatic

Returns the time interval until the next timer event.

Note
The return value is not perfectly accurate and can report values in excess of CH_CFG_ST_TIMEDELTA ticks.
The interval returned by this function is only meaningful if more timers are not added to the list until the returned time.
Parameters
[out]timeppointer to a variable that will contain the time interval until the next timer elapses. This pointer can be NULL if the information is not required.
Returns
The time, in ticks, until next time event.
Return values
falseif the timers list is empty.
trueif the timers list contains at least one timer.
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 216 of file chvt.h.

References currcore, and ch_virtual_timers_list::dlist.

◆ chVTIsArmedI()

static bool chVTIsArmedI ( const virtual_timer_t vtp)
inlinestatic

Returns true if the specified timer is armed.

Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
Returns
true if the timer is armed.
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 248 of file chvt.h.

Referenced by chVTIsArmed(), and chVTResetI().

◆ chVTIsArmed()

static bool chVTIsArmed ( const virtual_timer_t vtp)
inlinestatic

Returns true if the specified timer is armed.

Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
Returns
true if the timer is armed.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 265 of file chvt.h.

References chSysLock, chSysUnlock, and chVTIsArmedI().

Here is the call graph for this function:

◆ chVTResetI()

static void chVTResetI ( virtual_timer_t vtp)
inlinestatic

Disables a Virtual Timer.

Note
The timer is first checked and disabled only if armed.
Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 285 of file chvt.h.

References chVTDoResetI(), and chVTIsArmedI().

Referenced by chVTReset(), chVTSetContinuousI(), and chVTSetI().

Here is the call graph for this function:

◆ chVTReset()

static void chVTReset ( virtual_timer_t vtp)
inlinestatic

Disables a Virtual Timer.

Note
The timer is first checked and disabled only if armed.
Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 302 of file chvt.h.

References chSysLock, chSysUnlock, and chVTResetI().

Here is the call graph for this function:

◆ chVTSetI()

static void chVTSetI ( virtual_timer_t vtp,
sysinterval_t  delay,
vtfunc_t  vtfunc,
void *  par 
)
inlinestatic

Enables a one-shot virtual timer.

If the virtual timer was already enabled then it is re-enabled using the new parameters.

Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
[in]delaythe number of ticks before the operation timeouts, the special values are handled as follow:
  • TIME_INFINITE is allowed but interpreted as a normal time specification.
  • TIME_IMMEDIATE this value is not allowed.
[in]vtfuncthe timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
[in]para parameter that will be passed to the callback function
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 331 of file chvt.h.

References chVTDoSetI(), and chVTResetI().

Referenced by chVTSet().

Here is the call graph for this function:

◆ chVTSet()

static void chVTSet ( virtual_timer_t vtp,
sysinterval_t  delay,
vtfunc_t  vtfunc,
void *  par 
)
inlinestatic

Enables a one-shot virtual timer.

If the virtual timer was already enabled then it is re-enabled using the new parameters.

Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
[in]delaythe number of ticks before the operation timeouts, the special values are handled as follow:
  • TIME_INFINITE is allowed but interpreted as a normal time specification.
  • TIME_IMMEDIATE this value is not allowed.
[in]vtfuncthe timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
[in]para parameter that will be passed to the callback function
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 360 of file chvt.h.

References chSysLock, chSysUnlock, and chVTSetI().

Here is the call graph for this function:

◆ chVTSetContinuousI()

static void chVTSetContinuousI ( virtual_timer_t vtp,
sysinterval_t  delay,
vtfunc_t  vtfunc,
void *  par 
)
inlinestatic

Enables a continuous virtual timer.

If the virtual timer was already enabled then it is re-enabled using the new parameters.

Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
[in]delaythe number of ticks before the operation timeouts, the special values are handled as follow:
  • TIME_INFINITE is allowed but interpreted as a normal time specification.
  • TIME_IMMEDIATE this value is not allowed.
[in]vtfuncthe timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
[in]para parameter that will be passed to the callback function
Function Class:
This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers.

Definition at line 390 of file chvt.h.

References chVTDoSetContinuousI(), and chVTResetI().

Referenced by chVTSetContinuous().

Here is the call graph for this function:

◆ chVTSetContinuous()

static void chVTSetContinuous ( virtual_timer_t vtp,
sysinterval_t  delay,
vtfunc_t  vtfunc,
void *  par 
)
inlinestatic

Enables a continuous virtual timer.

If the virtual timer was already enabled then it is re-enabled using the new parameters.

Precondition
The timer must have been initialized using chVTObjectInit() or chVTDoSetI().
Parameters
[in]vtpthe virtual_timer_t structure pointer
[in]delaythe number of ticks before the operation timeouts, the special values are handled as follow:
  • TIME_INFINITE is allowed but interpreted as a normal time specification.
  • TIME_IMMEDIATE this value is not allowed.
[in]vtfuncthe timer callback function. After invoking the callback the timer is disabled and the structure can be disposed or reused.
[in]para parameter that will be passed to the callback function
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 419 of file chvt.h.

References chSysLock, chSysUnlock, and chVTSetContinuousI().

Here is the call graph for this function:

◆ chVTGetReloadIntervalX()

static sysinterval_t chVTGetReloadIntervalX ( virtual_timer_t vtp)
inlinestatic

Returns the current reload value.

Parameters
[in]vtpthe virtual_timer_t structure pointer
Returns
The reload value.
Function Class:
This is an X-Class API, this function can be invoked from any context.

Definition at line 435 of file chvt.h.

References ch_virtual_timer::reload.

◆ chVTSetReloadIntervalX()

static void chVTSetReloadIntervalX ( virtual_timer_t vtp,
sysinterval_t  reload 
)
inlinestatic

Changes a timer reload time interval.

Note
This function is meant to be called from a timer callback, it does nothing in any other context.
Calling this function from a one-shot timer callback turns it into a continuous timer.
Parameters
[in]vtpthe virtual_timer_t structure pointer
[in]reloadthe new reload value, zero means no reload
Function Class:
This is an X-Class API, this function can be invoked from any context.

Definition at line 452 of file chvt.h.

References ch_virtual_timer::reload.

◆ chVTGetTimeStamp()

static systimestamp_t chVTGetTimeStamp ( void  )
inlinestatic

Generates a monotonic time stamp.

This function generates a monotonic time stamp synchronized with the system time. The time stamp has the same resolution of system time.

Note
There is an assumption, this function must be called at least once before the system time wraps back to zero or synchronization is lost. You may use a periodic virtual timer with a very large interval in order to keep time stamps synchronized by calling this function.
Returns
The time stamp.
Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 474 of file chvt.h.

References chSysLock, chSysUnlock, and chVTGetTimeStampI().

Here is the call graph for this function:

◆ chVTResetTimeStamp()

static void chVTResetTimeStamp ( void  )
inlinestatic

Resets and re-synchronizes the time stamps monotonic counter.

Function Class:
Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 491 of file chvt.h.

◆ __vt_object_init()

static void __vt_object_init ( virtual_timers_list_t vtlp)
inlinestatic

Virtual Timers instance initialization.

Note
Internal use only.
Parameters
[out]vtlppointer to the virtual_timers_list_t structure
Function Class:
Not an API, this function is for internal use only.

Definition at line 511 of file chvt.h.

References ch_dlist_init(), chVTGetSystemTimeX(), ch_virtual_timers_list::dlist, ch_virtual_timers_list::laststamp, ch_virtual_timers_list::lasttime, and ch_virtual_timers_list::systime.

Referenced by chInstanceObjectInit().

Here is the call graph for this function: