Real time 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_rtc () | |
Construct a real time clock object instance. | |
virtual | ~clock_rtc () override |
Destruct the real time clock object instance. | |
Public Member Functions | |
virtual void | start (void) override |
Initialise and make the RTC tick. | |
Public Member Functions | |
virtual timestamp_t | now (void) override |
Tell the current time adjusted for epoch. | |
virtual result_t | sleep_until (timestamp_t timestamp) override |
Sleep until an absolute timestamp. | |
virtual offset_t | offset (void) override |
Get adjustment offset. | |
virtual offset_t | offset (offset_t value) override |
Set adjustment offset. | |
void | internal_check_timestamps (void) |
Public Member Functions | |
timestamp_t | steady_now (void) |
Tell the current time since startup. | |
result_t | sleep_for (duration_t duration) |
Sleep for a relative duration. | |
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 = 1 |
Real time clock frequency in Hz. | |
Real time clock.
This clock counts seconds since epoch or startup.
The real time clock should be derived from a battery powered second counting RTC, initialised at startup with the number of seconds since the standard POSIX epoch (January 1st, 1970).
As any usual clock, it might occasionally be adjusted to match a reference clock, so it cannot be a steady clock.
For systems that do not have a hardware RTC, it can be derived from SysTick, but in this case it must be externally initialised with the epoch.
Definition at line 598 of file os-clocks.h.
os::rtos::clock_rtc::clock_rtc | ( | ) |
Construct a real time clock object instance.
Definition at line 653 of file os-clocks.cpp.
|
overridevirtual |
Destruct the real time clock object instance.
Definition at line 663 of file os-clocks.cpp.
|
inherited |
|
inlineinherited |
Get object name.
All objects return a non-null string; anonymous objects return "-"
.
Definition at line 774 of file os-decls.h.
|
overridevirtualinherited |
Tell the current time adjusted for epoch.
Reimplemented from os::rtos::clock.
Definition at line 416 of file os-clocks.cpp.
|
overridevirtualinherited |
Set adjustment offset.
[in] | value | Integer representing the offset to epoch (positive). |
Definition at line 481 of file os-clocks.cpp.
|
overridevirtualinherited |
Get adjustment offset.
Definition at line 472 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.
|
overridevirtualinherited |
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 from os::rtos::clock.
Definition at line 433 of file os-clocks.cpp.
|
overridevirtual |
Initialise and make the RTC tick.
Must be called only once, during inits.
Implements os::rtos::clock.
Definition at line 677 of file os-clocks.cpp.
|
inherited |
Tell the current time since startup.
Definition at line 187 of file os-clocks.cpp.
|
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 |
Real time clock frequency in Hz.
Definition at line 610 of file os-clocks.h.