SysTick derived clock. More...
#include <cmsis-plus/rtos/os.h>
Public Types | |
Types & Constants | |
using | duration_t = port::clock::duration_t |
Type of variables holding clock durations. | |
using | timestamp_t = port::clock::timestamp_t |
Type of variables holding clock time stamps. | |
using | offset_t = port::clock::offset_t |
Type of variables holding clock offsets. | |
Public Member Functions | |
Constructors & Destructor | |
clock_systick () | |
Construct a SysTick clock object instance. | |
virtual | ~clock_systick () override |
Destruct the SysTick clock object instance. | |
Public Member Functions | |
virtual timestamp_t | now (void) |
Tell the current time, possibly adjusted for epoch. | |
timestamp_t | steady_now (void) |
Tell the current time since startup. | |
result_t | sleep_for (duration_t duration) |
Sleep for a relative duration. | |
virtual result_t | sleep_until (timestamp_t timestamp) |
Sleep until an absolute timestamp. | |
result_t | wait_for (duration_t timeout) |
Timed wait for an event. | |
timestamp_t | update_for_slept_time (duration_t duration) |
Increase the internal count after a deep sleep. | |
Public Member Functions | |
const char * | name (void) const |
Get object name. | |
Static Public Attributes | |
Types & Constants | |
static constexpr uint32_t | frequency_hz = OS_INTEGER_SYSTICK_FREQUENCY_HZ |
SysTick frequency in Hz. | |
Public Member Functions | |
virtual void | start (void) override |
template<typename Rep_T > | |
static constexpr clock::duration_t | ticks_cast (Rep_T microsec) |
Convert microseconds to ticks. | |
SysTick derived clock.
This clock counts SysTick interrupts since startup.
The SysTick clock should be a steady clock, i.e. the total count of ticks should be monotone ascending (in other words no adjustments to the past should be performed).
For Cortex-M implementations using the standard SysTick, this clock is able to provide accuracy at CPU cycle level, by sampling the SysTick internal counter. For a CPU clock of 100 MHz, this gives a 10 ns resolution, quite high for accurate timing.
Definition at line 468 of file os-clocks.h.
os::rtos::clock_systick::clock_systick | ( | ) |
Construct a SysTick clock object instance.
Definition at line 550 of file os-clocks.cpp.
|
overridevirtual |
Destruct the SysTick clock object instance.
Definition at line 560 of file os-clocks.cpp.
|
inlineinherited |
Get object name.
All objects return a non-null string; anonymous objects return "-"
.
Definition at line 774 of file os-decls.h.
|
virtualinherited |
Tell the current time, possibly adjusted for epoch.
Reimplemented in os::rtos::adjustable_clock, and os::rtos::clock_highres.
Definition at line 173 of file os-clocks.cpp.
|
inherited |
Sleep for a relative duration.
[in] | duration | The number of clock units (ticks or seconds) to sleep. |
ETIMEDOUT | The sleep lasted the entire duration. |
EPERM | Cannot be invoked from an Interrupt Service Routines. |
EINTR | The sleep was interrupted. |
Definition at line 201 of file os-clocks.cpp.
|
virtualinherited |
Sleep until an absolute timestamp.
[in] | timestamp | The absolute moment in time, in clock units. |
ETIMEDOUT | The sleep lasted the entire duration. |
EPERM | Cannot be invoked from an Interrupt Service Routines. |
EINTR | The sleep was interrupted. |
Reimplemented in os::rtos::adjustable_clock.
Definition at line 243 of file os-clocks.cpp.
|
overridevirtual |
Implements os::rtos::clock.
Definition at line 569 of file os-clocks.cpp.
|
inherited |
Tell the current time since startup.
Definition at line 187 of file os-clocks.cpp.
|
staticconstexpr |
Convert microseconds to ticks.
Rep_T | Type of input, auto deduced (usually uint32_t or uin64_t) |
[in] | microsec | The number of microseconds. |
|
inherited |
Increase the internal count after a deep sleep.
duration | Number of ticks lost during sleep. |
During deep sleep the interrupts used to count clock ticks are usually disabled and an external RTC is configured to wake-up the device, so a number of clock ticks are lost.
To keep the clocks accurate, it is recommended to sample the external RTC before entering deep sleep and again when the device is back to life, compute the time slept as difference, and use this function to update the internal clock counter.
Definition at line 324 of file os-clocks.cpp.
|
inherited |
Timed wait for an event.
[in] | timeout | The timeout in clock units. |
result::ok | An event occurred before the timeout. |
ETIMEDOUT | The wait lasted the entire duration. |
EPERM | Cannot be invoked from an Interrupt Service Routines. |
EINTR | The sleep was interrupted. |
Definition at line 282 of file os-clocks.cpp.
|
staticconstexpr |
SysTick frequency in Hz.
Definition at line 480 of file os-clocks.h.